none
FTP Lista de arquivos RRS feed

  • Pergunta

  • Olá

    Gente, eu preciso pegar uma lista de arquivos via FTP. Estou conseguindo só que preciso também da data e tamanho dos arquivos:

      Public Function GetFileList(ByVal host As String, ByVal username As String, ByVal password As String, ByVal currentdirectory As String) As List(Of String)
            Dim oFTP As FtpWebRequest = CType(FtpWebRequest.Create(host & currentdirectory), FtpWebRequest)
            oFTP.Credentials = New NetworkCredential(username, password)
            oFTP.KeepAlive = True
            oFTP.Method = WebRequestMethods.Ftp.ListDirectory
            Dim response As FtpWebResponse = CType(oFTP.GetResponse, FtpWebResponse)
            Dim sr As StreamReader = New StreamReader(response.GetResponseStream)
            Dim str As String = sr.ReadLine
            While str IsNot Nothing
                If str.EndsWith(".exe") Then
                    ListBox1.Items.Add(str)
                End If
                str = sr.ReadLine
            End While
            sr.Close()
            response.Close()
            oFTP = Nothing
        End Function

    quarta-feira, 18 de janeiro de 2017 02:31

Respostas

  • Eliseu,

    Segue como você pode fazer. A única coisa que terá que mudar é o conteúdo da string linha que deve ter o valor que você capturar no response.

                string linha = "-rw-r--r--   1   semua   semua   76786 Jan 17 23:24 backup_17012005488004540.vybkp";
    
                string regex =
                        @"^" +                          //# Start of line
                        @"(?<dir>[\-ld])" +             //# File size          
                        @"(?<permission>[\-rwx]{9})" +  //# Whitespace          \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<filecode>\d+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<owner>\w+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<group>\w+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<size>\d+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<month>\w{3})" +            //# Month (3 letters)   \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<day>\d{1,2})" +            //# Day (1 or 2 digits) \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<timeyear>[\d:]{4,5})" +    //# Time or year        \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<filename>(.*))" +          //# Filename            \n
                        @"$";                           //# End of line
    
    
                var split = new Regex(regex).Match(linha);
                string dir = split.Groups["dir"].ToString();
                string filename = split.Groups["filename"].ToString();
                string tamanho = split.Groups["size"].ToString();
                string data = split.Groups["day"].ToString() + " " + split.Groups["month"].ToString() + " às " + split.Groups["timeyear"].ToString();
    Fonte: http://stackoverflow.com/questions/25246426/extracting-file-names-from-webrequestmethods-ftp-listdirectorydetails


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP quinta-feira, 19 de janeiro de 2017 13:24
    • Marcado como Resposta Eliseu5 quinta-feira, 19 de janeiro de 2017 18:10
    quinta-feira, 19 de janeiro de 2017 13:24

Todas as Respostas

  • Olá,

    Ao invés de usar: WebRequestMethods.Ftp.ListDirectory

    Use: WebRequestMethods.Ftp.ListDirectoryDetails

    Isso porque esse outro, lhe provê mais detalhes. A partir disso coloque um break point no seu código e o debugue para ver as opções disponíveis.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 18 de janeiro de 2017 10:18
  • Olá André

    Agradeço pela ajuda. Realizei a alteração conforme me informou, no entanto não estou achando um meio de obter esses detalhes. :/

    quarta-feira, 18 de janeiro de 2017 12:31
  • Colocou break point no seu código e o debugou ele? Quais as propriedades aparecem no objeto response?

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 18 de janeiro de 2017 12:57
  • Desculpe André, mas não faço ideia como fazer isso.
    quarta-feira, 18 de janeiro de 2017 17:44
  • OK, então recomendo que veja essa live de como debugar seu código no visual studio:

    https://www.youtube.com/watch?v=DurxzcJ37x8


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 18 de janeiro de 2017 17:56
  • Olá André

    Agradeço muito, vou assistir o vídeo sugerido.

    Consegui chegar ao resultado:

    Mas como extrair apenas os itens desejados? Tentei usar o "str(1), str(2), etc" mas parece não funcionar, pois pega letra por letra e não palavra.

    quarta-feira, 18 de janeiro de 2017 18:20
  • Eliseu,

    Segue como você pode fazer. A única coisa que terá que mudar é o conteúdo da string linha que deve ter o valor que você capturar no response.

                string linha = "-rw-r--r--   1   semua   semua   76786 Jan 17 23:24 backup_17012005488004540.vybkp";
    
                string regex =
                        @"^" +                          //# Start of line
                        @"(?<dir>[\-ld])" +             //# File size          
                        @"(?<permission>[\-rwx]{9})" +  //# Whitespace          \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<filecode>\d+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<owner>\w+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<group>\w+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<size>\d+)" +
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<month>\w{3})" +            //# Month (3 letters)   \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<day>\d{1,2})" +            //# Day (1 or 2 digits) \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<timeyear>[\d:]{4,5})" +    //# Time or year        \n
                        @"\s+" +                        //# Whitespace          \n
                        @"(?<filename>(.*))" +          //# Filename            \n
                        @"$";                           //# End of line
    
    
                var split = new Regex(regex).Match(linha);
                string dir = split.Groups["dir"].ToString();
                string filename = split.Groups["filename"].ToString();
                string tamanho = split.Groups["size"].ToString();
                string data = split.Groups["day"].ToString() + " " + split.Groups["month"].ToString() + " às " + split.Groups["timeyear"].ToString();
    Fonte: http://stackoverflow.com/questions/25246426/extracting-file-names-from-webrequestmethods-ftp-listdirectorydetails


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP quinta-feira, 19 de janeiro de 2017 13:24
    • Marcado como Resposta Eliseu5 quinta-feira, 19 de janeiro de 2017 18:10
    quinta-feira, 19 de janeiro de 2017 13:24
  • Olá André

    Obrigado por sua ajuda. Funcionou!!! Muito obrigado mesmo. :)

    • Editado Eliseu5 quinta-feira, 19 de janeiro de 2017 18:10
    quinta-feira, 19 de janeiro de 2017 18:06