Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fed07

webrequestmethods.ftp.Listdirectorydetails

Recommended Posts

fed07

Boas, eu tou a trabalhar num gerenciador de FTP, o problema é que eu arranjei forma do programa mostrar os ficheiros/pastas do servidor FTP, só que aquilo dá informação a mais que eu não preciso, essa informação é recebida em string. Alguem tem alguma ideia de como ficar só com a informação que preciso?

Código:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim arr() As String
        Dim request As FtpWebRequest = WebRequest.Create("ftp://ftp.drivehq.com/")
        request.Credentials = New NetworkCredential(username, password)
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails

        Dim response As FtpWebResponse = request.GetResponse()
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As StreamReader = New StreamReader(responseStream)
        Dim lol As String

        Do
            lol = reader.ReadLine
            If Len(lol) < 1 Then Exit Do
            arr = Split(lol, vbnewline)  'aqui tava a tentar dividir com newline mas não funcionou
            For i = 0 To UBound(arr)
                If Len(arr(i)) > 0 Then
                    ListBox3.Items.Add(arr(i))  'adiciona os nomes dos ficheiros na listbox
                End If
            Next
        Loop

        MessageBox.Show("Directory List Complete, status {0}", response.StatusDescription)

        reader.Close()
        response.Close()
    End Sub

Esta é a informação de um dos vários ficheiros do servidor:

-rwx------ 1 user group        433664 Apr 18 20:44 U992.exe

é devolvido desta forma em string e eu só tava a precisar do nome do ficheiro e do tamanho do mesmo, alguma forma de apagar tudo o resto?

thanks

//fed07

Share this post


Link to post
Share on other sites
ribeiro55

Tens ideia de como é que isso devolve nomes que tenham espaços? (que não deviam ter mas pode acontecer)

Dependendo da forma como o espaço é devolvido podias ir lá com o espaço como delimitador.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
fed07

Pois também andei as voltas com isso pa tentar perceber, só me veio à cabeça o vbnewline...

A única forma que descobri para simplificar isto era usando o .ListDirectory em que só devolve o nome do ficheiro mas dá-me um erro 550 no getresponse!

Ando um bocado as aranhas com isto LOL

Share this post


Link to post
Share on other sites
fed07

OK... isto é embaraçoso mas..

 Do
        lol = reader.ReadLine
        If Len(lol) < 1 Then Exit Do
        'arr = Split(lol, vbNewLine)
        arr = Split(lol, Chr(32))
        For i = 0 To UBound(arr)
              If Len(arr(i)) > 0 Then
                   ListBox3.Items.Add(arr(i))
              End If
        Next
Loop

Alterei o vbnewline por um chr(32) que é o equivalente a um spacebar e ele dividiu tudo!

Problema novo: adiciona.me milhentos items ao listbox e continuo a só precisar do Nome do ficheiro e o tamanho lol

Share this post


Link to post
Share on other sites
ribeiro55

Até podias fazer

Split(lol, Chr(Asc(" ")))

Vamos lá com calma. Tenta descobrir como é que vêm ficheiros que contenham espaços.

Dependendo de como venham, é fácil de ir buscar os valores que pretendes, tirando os atributos e restantes infos que não te interessam.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
fed07

Tanto quanto eu percebo ele ao fazer o .listdirectorydetails vai pedir ao servidor FTP todos os dados de cada ficheiro presente.

Eu recebo esses dados através do .readline que mos devolve em forma de string e guarda na variável lol, logo eu penso que ele esteja a receber a string já com os espaços.

Share this post


Link to post
Share on other sites
ribeiro55

Estou com uma bela carga de sono em cima, mas toma lá uma forma pouco elegante de resolver a coisa.

Está preparado para papar nomes de ficheiros quer tenham espaços ou representações de espaços.

        Dim PrimeiraFase As String = "-rwx------ 1 user group         433664 Apr 18 20:44 U992.exe"
        
        'Aproveitamos a porrada de espaços ali e dividimos logo a coisa a meio
        Dim P() As String = Split(PrimeiraFase, "  ")
        Dim SegundaFase As String = P(UBound(P)).Trim
        
        'Do que acabamos de sacar e limar, sabemos que todo o valor até ao próximo espaço é size do ficheiro
        Dim Tamanho As Long = Long.Parse(SegundaFase.Substring(0, SegundaFase.IndexOf(" ")))

        Dim Ficheiro As String = String.Empty
    
        'Por fim, como a data tem sempre o mesmo formato (3 cadeias de caracteres delimitadas por espaços)
        'é seguro começar a raspar o que resta, o ficheiro, logo a partir do índice 4 do que resta sem o size
        Dim FinalP() As String = Split(SegundaFase, " ")

        For i As Integer = 4 To UBound(FinalP)
            Ficheiro &= " " & FinalP(i)
        Next

        Ficheiro = Ficheiro.Trim
        MsgBox(String.Format("Ficheiro: {0}" & vbCrLf & "Tamanho: {1} bytes", Ficheiro, Tamanho))

No mínimo serve para te dar ideias.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
fed07

=| Epá sem palavras.. Tu és o maior meu!

Obrigadão! Deu para ideias e deu para perceber a tua ideia também! Código muito bem comentado e elaborado.

MUITO MAS MUITO OBRIGADO! És o maior!

Share this post


Link to post
Share on other sites
david_carlos

sera que me podes ajudar tbm tou a tentar descobrir como faço a listagem do meu ftp para uma listbox

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.