none
Listar arquivos do FTP ordenados por data (criação ou modificação) RRS feed

  • Pergunta

  • Beleza galera,

    Gostaria de listar arquivos do FTP ordenados por data decrescente ou não.

    Se alguém puder ajudar, desde já agradeço.

    Código usado para listar:

    public string[] GetListaArquivos()
            {
                string[] downloadArquivos;
                StringBuilder resultado = new StringBuilder();
                FtpWebRequest requisicaoFTP;
                try
                {
                    requisicaoFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strDominioFTP + "/"));
                    requisicaoFTP.UseBinary = true;
                    requisicaoFTP.Credentials = new NetworkCredential(ftpUsuarioID, ftpSenha);
                    requisicaoFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                    WebResponse response = requisicaoFTP.GetResponse();
    
                    StreamReader reader = new StreamReader(response.GetResponseStream());
    
                    string line = reader.ReadLine();
                    while (line != null)
                    {
    
                        if (line != "." && line != "..")
                        {
                            resultado.Append(line);
                            resultado.Append("\n");
                        }
    
                        line = reader.ReadLine();
                    }
    
                    //downloadArquivos = resultado.ToString().Split('\n');
    
                    reader.Close();
                    response.Close();
                    
                    return resultado.ToString().Split('\n');
                }
                catch (Exception ex)
                {
    
                    ico = Properties.Resources.erro_BkpNuvem128;
                    SysTray.Icon = ico;
    
                    icone = SysTray.BalloonTipIcon;
    
                    SysTray.ShowBalloonTip(3, "Erro de leitura dos arquivos!", ex.Message, icone);
    
                    downloadArquivos = null;
                    return downloadArquivos;
                }
            }


    terça-feira, 14 de outubro de 2014 20:29

Respostas

  • Agradeço a todos pela ajuda e atenção, abaixo segue o código de como ficou.

    Não consegui diretamente então listei os arquivos depois os ordenei.

            string[] listaArquivos = GetListaArquivos();
    
            int qtdArquivo = 0;
            int posArq = 0;
    
            Ordenacao(arquivosOrdenar);
    
            public string[] GetListaArquivos()
            {
    
                int posArq = 0;
    
                string[] downloadArquivos;
                StringBuilder resultado = new StringBuilder();
                FtpWebRequest requisicaoFTP;
                try
                {
                    requisicaoFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strDominioFTP + "/"));
                    requisicaoFTP.UseBinary = true;
                    requisicaoFTP.KeepAlive = true;
                    requisicaoFTP.Credentials = new NetworkCredential(ftpUsuarioID, ftpSenha);
                    requisicaoFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    
                    WebResponse response = requisicaoFTP.GetResponse();
    
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    int qtdArq = WebRequestMethods.Ftp.ListDirectory.Count();
    
                    string line = reader.ReadLine();
                    //int linhas = 0;
                    arquivosOrdenar = new string[qtdArq, 2];
                    while (line != null)
                    {
    
                        if (line != "." && line != "..")
                        {
                            linhas++;
    
                            resultado.Append(line);
                            resultado.Append("\n");
    
                            string serverUri = "ftp://" + strDominioFTP + "/" + line;
    
                            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
                            request.Credentials = new NetworkCredential(ftpUsuarioID, ftpSenha);
                            request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
                            FtpWebResponse resp = (FtpWebResponse)request.GetResponse();
    
                            DateTime dataArq = resp.LastModified;
    
                            arquivosOrdenar[posArq, 0] = line;
                            arquivosOrdenar[posArq, 1] = dataArq.ToString();
    
                            posArq++;
    
                            resp.Close();
    
    
    
                        }
    
                        line = reader.ReadLine();
                    }
    
                    reader.Close();
                    response.Close();
    
                    return resultado.ToString().Split('\n');
                }
                catch (Exception ex)
                {
    
                    ico = Properties.Resources.erro_BkpNuvem128;
                    SysTray.Icon = ico;
    
                    icone = SysTray.BalloonTipIcon;
    
                    SysTray.ShowBalloonTip(3, "Erro de leitura dos arquivos!", ex.Message, icone);
    
                    downloadArquivos = null;
                    return downloadArquivos;
                }
            }
    
            static void Ordenacao(string[,] strLista)
            {
                int i, j, max;
                string varAux;
                for (i = 0; i < (strLista.Length / 2) - 1; i++)
                {
                    max = i;
                    for (j = i + 1; j < (strLista.Length / 2); j++)
                    {
    
                        DateTime dt1 = DateTime.Parse(strLista[j, 1].Substring(0, 10));
                        DateTime dt2 = DateTime.Parse(strLista[max, 1].Substring(0, 10));
                        if (dt1.CompareTo(dt2) > 0)
                        {
                            max = j;
                        }
                    }
                    //Altera a data
                    varAux = strLista[max, 1];
                    strLista[max, 1] = strLista[i, 1];
                    strLista[i, 1] = varAux;
    
                    //Altera o nome
                    varAux = strLista[max, 0];
                    strLista[max, 0] = strLista[i, 0];
                    strLista[i, 0] = varAux;
                }
            }

    Vlw's e caso alguem descubra uma maneira DIRETA do FTP para isso, será bem vinda.

    • Marcado como Resposta Lukas Piccolo segunda-feira, 20 de outubro de 2014 17:28
    segunda-feira, 20 de outubro de 2014 17:27

Todas as Respostas

  • Neste link tem uma classe ftp bem completa, uso em minhas aplicações: http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class

    Gilson Joanelo - Desenvolvedor Web

    quarta-feira, 15 de outubro de 2014 00:36
  • Neste link tem uma classe ftp bem completa, uso em minhas aplicações: http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class

    Gilson Joanelo - Desenvolvedor Web

    Infelizmente neste link não encontrei o que preciso.

    Eu ate posso listar os arquivos, pegar as datas, e ordenar manualmente, mas se tivesse algum parâmetro automático seria bem melhor =).

    quarta-feira, 15 de outubro de 2014 11:39
  • Ninguém mais?
    sexta-feira, 17 de outubro de 2014 11:23
  • Veja se serve para você este código:

    public static String[] Get_File_List(String Server, String UserId, String Password, out int Count)
     {
      Count = 0;
      string[] downloadFiles = null;
      StringBuilder result = new StringBuilder();
      FtpWebRequest reqFTP = null;
      StreamReader reader = null;
      WebResponse response = null;
      String FilesListing = "";
      String Last = "";
      try
      {
       reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(Server));
       reqFTP.Credentials = new NetworkCredential(UserId, Password);
       reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
       reqFTP.KeepAlive = false;
       reqFTP.Timeout = 10000;
       response = reqFTP.GetResponse();
       reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII);
       string line = reader.ReadLine();
       while (line != null)
       {
        result.Append(line);
        result.Append("\n");
        line = reader.ReadLine();
       }
       if (result.ToString().Trim().Length > 1)
       {
        result.Remove(result.ToString().LastIndexOf('\n'), 1);
       }
    
    
       downloadFiles = result.ToString().Split('\n');
       DateTime Lowest = DateTime.Now;
       foreach (string strline in downloadFiles)
       {
        if (strline.Trim() != "" && (!strline.ToString().ToLower().Trim().StartsWith("total")) && (!strline.ToString().ToLower().Trim().StartsWith("d")))
        {
         if (!(strline.Contains("<DIR>") || strline.Contains("ErrLog") || strline.Contains("TaxGrpLOG.txt") || strline.Contains("TaxDtlLOG.txt") || strline.Contains("DnPSOLOG.txt")))
         {
          Count++;
          try
          {
           DateTime x = Convert.ToDateTime(strline.Substring(0, 17));
           if (x.Date == DateTime.Now.Date)
            FilesListing += strline + ";";
          }
          catch
          {
           try
           {
            if (strline.Substring(41, 13).Contains(":"))
            {
             DateTime x = Convert.ToDateTime(DateTime.Now.Year.ToString() + " " + strline.Substring(41, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
            else
            {
             DateTime x = Convert.ToDateTime(strline.Substring(41, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
           }
           catch
           {
            if(strline.Substring(45, 13).Contains(":"))
            {
            DateTime x = Convert.ToDateTime(DateTime.Now.Year.ToString() + " " + strline.Substring(45, 14));
            if (x.Date == DateTime.Now.Date)
             FilesListing += strline + ";";
            }
            else
            {
             DateTime x = Convert.ToDateTime(strline.Substring(45, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
           }
          }
         }
        }
       }
       return FilesListing.Split(';');
      }
      catch
      {
    
       Count = 0;
       return (Last).Split(';');
      }
      finally
      {
       reader.Close();
       reader.Dispose();
       response.Close();
      }
     }
    
    Fonte: https://social.msdn.microsoft.com/Forums/vstudio/en-US/091665cd-2c71-4d38-a8ff-df9f43cb35ef/list-of-file-in-ftp-where-modified-date-is-today

    Se te ajudou marca como resposta.
    sexta-feira, 17 de outubro de 2014 12:07
  • Veja se serve para você este código:

    public static String[] Get_File_List(String Server, String UserId, String Password, out int Count)
     {
      Count = 0;
      string[] downloadFiles = null;
      StringBuilder result = new StringBuilder();
      FtpWebRequest reqFTP = null;
      StreamReader reader = null;
      WebResponse response = null;
      String FilesListing = "";
      String Last = "";
      try
      {
       reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(Server));
       reqFTP.Credentials = new NetworkCredential(UserId, Password);
       reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
       reqFTP.KeepAlive = false;
       reqFTP.Timeout = 10000;
       response = reqFTP.GetResponse();
       reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII);
       string line = reader.ReadLine();
       while (line != null)
       {
        result.Append(line);
        result.Append("\n");
        line = reader.ReadLine();
       }
       if (result.ToString().Trim().Length > 1)
       {
        result.Remove(result.ToString().LastIndexOf('\n'), 1);
       }
    
    
       downloadFiles = result.ToString().Split('\n');
       DateTime Lowest = DateTime.Now;
       foreach (string strline in downloadFiles)
       {
        if (strline.Trim() != "" && (!strline.ToString().ToLower().Trim().StartsWith("total")) && (!strline.ToString().ToLower().Trim().StartsWith("d")))
        {
         if (!(strline.Contains("<DIR>") || strline.Contains("ErrLog") || strline.Contains("TaxGrpLOG.txt") || strline.Contains("TaxDtlLOG.txt") || strline.Contains("DnPSOLOG.txt")))
         {
          Count++;
          try
          {
           DateTime x = Convert.ToDateTime(strline.Substring(0, 17));
           if (x.Date == DateTime.Now.Date)
            FilesListing += strline + ";";
          }
          catch
          {
           try
           {
            if (strline.Substring(41, 13).Contains(":"))
            {
             DateTime x = Convert.ToDateTime(DateTime.Now.Year.ToString() + " " + strline.Substring(41, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
            else
            {
             DateTime x = Convert.ToDateTime(strline.Substring(41, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
           }
           catch
           {
            if(strline.Substring(45, 13).Contains(":"))
            {
            DateTime x = Convert.ToDateTime(DateTime.Now.Year.ToString() + " " + strline.Substring(45, 14));
            if (x.Date == DateTime.Now.Date)
             FilesListing += strline + ";";
            }
            else
            {
             DateTime x = Convert.ToDateTime(strline.Substring(45, 13));
             if (x.Date == DateTime.Now.Date)
              FilesListing += strline + ";";
            }
           }
          }
         }
        }
       }
       return FilesListing.Split(';');
      }
      catch
      {
    
       Count = 0;
       return (Last).Split(';');
      }
      finally
      {
       reader.Close();
       reader.Dispose();
       response.Close();
      }
     }
    Fonte: https://social.msdn.microsoft.com/Forums/vstudio/en-US/091665cd-2c71-4d38-a8ff-df9f43cb35ef/list-of-file-in-ftp-where-modified-date-is-today

    Se te ajudou marca como resposta.

    Este código lista arquivos que a data de modificação é a de HOJE. O que preciso é ordenado por data (decrescente de preferência) independente da data do arquivo.
    sexta-feira, 17 de outubro de 2014 14:37
  • te dei a solução ,basta você manipular os trechos onde tem :

    DateTime.Now.Date

    Essa parte de cima diz para pegar a data de hoje é so alterar para o que você precisa.
    sexta-feira, 17 de outubro de 2014 15:00
  • Agradeço a todos pela ajuda e atenção, abaixo segue o código de como ficou.

    Não consegui diretamente então listei os arquivos depois os ordenei.

            string[] listaArquivos = GetListaArquivos();
    
            int qtdArquivo = 0;
            int posArq = 0;
    
            Ordenacao(arquivosOrdenar);
    
            public string[] GetListaArquivos()
            {
    
                int posArq = 0;
    
                string[] downloadArquivos;
                StringBuilder resultado = new StringBuilder();
                FtpWebRequest requisicaoFTP;
                try
                {
                    requisicaoFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strDominioFTP + "/"));
                    requisicaoFTP.UseBinary = true;
                    requisicaoFTP.KeepAlive = true;
                    requisicaoFTP.Credentials = new NetworkCredential(ftpUsuarioID, ftpSenha);
                    requisicaoFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    
                    WebResponse response = requisicaoFTP.GetResponse();
    
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    int qtdArq = WebRequestMethods.Ftp.ListDirectory.Count();
    
                    string line = reader.ReadLine();
                    //int linhas = 0;
                    arquivosOrdenar = new string[qtdArq, 2];
                    while (line != null)
                    {
    
                        if (line != "." && line != "..")
                        {
                            linhas++;
    
                            resultado.Append(line);
                            resultado.Append("\n");
    
                            string serverUri = "ftp://" + strDominioFTP + "/" + line;
    
                            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
                            request.Credentials = new NetworkCredential(ftpUsuarioID, ftpSenha);
                            request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
                            FtpWebResponse resp = (FtpWebResponse)request.GetResponse();
    
                            DateTime dataArq = resp.LastModified;
    
                            arquivosOrdenar[posArq, 0] = line;
                            arquivosOrdenar[posArq, 1] = dataArq.ToString();
    
                            posArq++;
    
                            resp.Close();
    
    
    
                        }
    
                        line = reader.ReadLine();
                    }
    
                    reader.Close();
                    response.Close();
    
                    return resultado.ToString().Split('\n');
                }
                catch (Exception ex)
                {
    
                    ico = Properties.Resources.erro_BkpNuvem128;
                    SysTray.Icon = ico;
    
                    icone = SysTray.BalloonTipIcon;
    
                    SysTray.ShowBalloonTip(3, "Erro de leitura dos arquivos!", ex.Message, icone);
    
                    downloadArquivos = null;
                    return downloadArquivos;
                }
            }
    
            static void Ordenacao(string[,] strLista)
            {
                int i, j, max;
                string varAux;
                for (i = 0; i < (strLista.Length / 2) - 1; i++)
                {
                    max = i;
                    for (j = i + 1; j < (strLista.Length / 2); j++)
                    {
    
                        DateTime dt1 = DateTime.Parse(strLista[j, 1].Substring(0, 10));
                        DateTime dt2 = DateTime.Parse(strLista[max, 1].Substring(0, 10));
                        if (dt1.CompareTo(dt2) > 0)
                        {
                            max = j;
                        }
                    }
                    //Altera a data
                    varAux = strLista[max, 1];
                    strLista[max, 1] = strLista[i, 1];
                    strLista[i, 1] = varAux;
    
                    //Altera o nome
                    varAux = strLista[max, 0];
                    strLista[max, 0] = strLista[i, 0];
                    strLista[i, 0] = varAux;
                }
            }

    Vlw's e caso alguem descubra uma maneira DIRETA do FTP para isso, será bem vinda.

    • Marcado como Resposta Lukas Piccolo segunda-feira, 20 de outubro de 2014 17:28
    segunda-feira, 20 de outubro de 2014 17:27