none
ListView + FTP + C# RRS feed

  • Pergunta

  • Quero que meus arquivos da ftp apareça no ListView do meu formulário, alguém já fez algo do tipo ?


    Atenciosamente,
    José Henrique Sabino

    sexta-feira, 7 de novembro de 2014 16:22

Respostas

  • Listando os arquivos:

    List<string> liArquivos = new List<string>();
    //Cria comunicação com o servidor
    //Definir o diretório a ser listado
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/");
    //Define que a ação vai ser de listar diretório
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para true
    request.KeepAlive = true;
    
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    {
    	//Criando a Stream para pegar o retorno
    	Stream responseStream = response.GetResponseStream();
    	using (StreamReader reader = new StreamReader(responseStream))
    	{
    		//Adicionar os arquivos na lista
    		liArquivos = reader.ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList<string>();
    	}
    }
    int i=0;
    //Responder a lista dos arquivos
    foreach (string item in liArquivos)
    {
    //	Response.Write(item + "<br />");
    listView1.Items.Add(item, i);
    i++;
    }




    Baixando:

    //Cria comunicação com o servidor
    //definindo o arquivo para download
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/logo.png");
    //Define que a ação vai ser de download
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para true
    request.KeepAlive = true;
    
    //criando o objeto FtpWebResponse
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    //Criando a Stream para ler o arquivo
    Stream responseStream = response.GetResponseStream();
    
    byte[] buffer = new byte[2048];
    
    //Definir o local onde o arquivo será criado.
    FileStream newFile = new FileStream("c:\\wwwroot\\exemplos\\logo.png", FileMode.Create);
    //Ler o arquivo de origem
    int readCount = responseStream.Read(buffer, 0, buffer.Length);
    while (readCount > 0)
    {
    	//Escrever o arquivo
    	newFile.Write(buffer, 0, readCount);
    	readCount = responseStream.Read(buffer, 0, buffer.Length);
    }
    newFile.Close();
    responseStream.Close();
    response.Close();



    Upload de Arquivo:

    //Caminho do arquivo para upload
    FileInfo fileInf = new FileInfo("c:\\wwwroot\\exemplos\\logo.png");
    //Cria comunicação com o servidor
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(""ftp://servidor.com.br/images/logo2.png"");
    //Define que a ação vai ser de upload
    request.Method = WebRequestMethods.Ftp.UploadFile;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para false
    request.KeepAlive = false;
    
    request.ContentLength = fileInf.Length;
    //cria a stream que será usada para mandar o arquivo via FTP
    Stream responseStream = request.GetRequestStream();
    byte[] buffer = new byte[2048];
    
    //Lê o arquivo de origem
    FileStream fs = fileInf.OpenRead();
    try
    {
    	//Enquanto vai lendo o arquivo de origem, vai escrevendo no FTP
    	int readCount = fs.Read(buffer, 0, buffer.Length);
    	while (readCount > 0)
    	{
    		//Esceve o arquivo
    		responseStream.Write(buffer, 0, readCount);
    		readCount = fs.Read(buffer, 0, buffer.Length);
    	}
    }
    finally
    {
    	fs.Close();
    	responseStream.Close();
    }
    

    • Marcado como Resposta Xarp2 sexta-feira, 7 de novembro de 2014 17:45
    sexta-feira, 7 de novembro de 2014 17:22

Todas as Respostas

  • Veja se esse projeto te ajuda:

    http://www.codeproject.com/Articles/11991/An-FTP-client-library-for-NET

    Creio que o autor nao utilize um listview no seu projeto, mas creio tambem que nao seria essa a parte problematica (caso ja tenha usao um listview no c#, nao há nada de diferente)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 7 de novembro de 2014 16:30
    Moderador
  • Você já consegue listar os arquivos??

    sexta-feira, 7 de novembro de 2014 16:57
  • Consigo listar os arquivos do computador, da ftp que não da certo


    Atenciosamente,
    José Henrique Sabino

    sexta-feira, 7 de novembro de 2014 17:13
  • Para listar os arquivos:

    public static IEnumerable<string> GetFilesInFtpDirectory(string url, string username, string password)
    {
        // Get the object used to communicate with the server.
        var request = (FtpWebRequest)WebRequest.Create(url);
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        request.Credentials = new NetworkCredential(username,password);
    
        using (var response = (FtpWebResponse) request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                var reader = new StreamReader(responseStream);
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (string.IsNullOrWhiteSpace(line) == false)
                    {
                        yield return line.Split(new[] { ' ', '\t' }).Last();    
                    }
                }
            }
        }
    }
    Para adicionar na ListView
    ListView1.Items.Clear();
    
        string[] files = GetFilesInFtpDirectory(ftp, usuario, senha);
        foreach (string file in files)
        {
    
            string fileName = Path.GetFileNameWithoutExtension(file);
            ListViewItem item = new ListViewItem(fileName);
            item.Tag = file;
    
            ListView1.Items.Add(item);
    
        }
    Marque como resposta se foi útil, por favor!



    • Editado Deric Ferreira sexta-feira, 7 de novembro de 2014 17:16
    • Sugerido como Resposta Deric Ferreira sexta-feira, 7 de novembro de 2014 17:42
    sexta-feira, 7 de novembro de 2014 17:16
  • Listando os arquivos:

    List<string> liArquivos = new List<string>();
    //Cria comunicação com o servidor
    //Definir o diretório a ser listado
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/");
    //Define que a ação vai ser de listar diretório
    request.Method = WebRequestMethods.Ftp.ListDirectory;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para true
    request.KeepAlive = true;
    
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    {
    	//Criando a Stream para pegar o retorno
    	Stream responseStream = response.GetResponseStream();
    	using (StreamReader reader = new StreamReader(responseStream))
    	{
    		//Adicionar os arquivos na lista
    		liArquivos = reader.ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList<string>();
    	}
    }
    int i=0;
    //Responder a lista dos arquivos
    foreach (string item in liArquivos)
    {
    //	Response.Write(item + "<br />");
    listView1.Items.Add(item, i);
    i++;
    }




    Baixando:

    //Cria comunicação com o servidor
    //definindo o arquivo para download
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/logo.png");
    //Define que a ação vai ser de download
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para true
    request.KeepAlive = true;
    
    //criando o objeto FtpWebResponse
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    //Criando a Stream para ler o arquivo
    Stream responseStream = response.GetResponseStream();
    
    byte[] buffer = new byte[2048];
    
    //Definir o local onde o arquivo será criado.
    FileStream newFile = new FileStream("c:\\wwwroot\\exemplos\\logo.png", FileMode.Create);
    //Ler o arquivo de origem
    int readCount = responseStream.Read(buffer, 0, buffer.Length);
    while (readCount > 0)
    {
    	//Escrever o arquivo
    	newFile.Write(buffer, 0, readCount);
    	readCount = responseStream.Read(buffer, 0, buffer.Length);
    }
    newFile.Close();
    responseStream.Close();
    response.Close();



    Upload de Arquivo:

    //Caminho do arquivo para upload
    FileInfo fileInf = new FileInfo("c:\\wwwroot\\exemplos\\logo.png");
    //Cria comunicação com o servidor
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(""ftp://servidor.com.br/images/logo2.png"");
    //Define que a ação vai ser de upload
    request.Method = WebRequestMethods.Ftp.UploadFile;
    //Credenciais para o login (usuario, senha)
    request.Credentials = new NetworkCredential("usuario", "senha");
    //modo passivo
    request.UsePassive = true;
    //dados binarios
    request.UseBinary = true;
    //setar o KeepAlive para false
    request.KeepAlive = false;
    
    request.ContentLength = fileInf.Length;
    //cria a stream que será usada para mandar o arquivo via FTP
    Stream responseStream = request.GetRequestStream();
    byte[] buffer = new byte[2048];
    
    //Lê o arquivo de origem
    FileStream fs = fileInf.OpenRead();
    try
    {
    	//Enquanto vai lendo o arquivo de origem, vai escrevendo no FTP
    	int readCount = fs.Read(buffer, 0, buffer.Length);
    	while (readCount > 0)
    	{
    		//Esceve o arquivo
    		responseStream.Write(buffer, 0, readCount);
    		readCount = fs.Read(buffer, 0, buffer.Length);
    	}
    }
    finally
    {
    	fs.Close();
    	responseStream.Close();
    }
    

    • Marcado como Resposta Xarp2 sexta-feira, 7 de novembro de 2014 17:45
    sexta-feira, 7 de novembro de 2014 17:22