Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fed07

webrequestmethods.ftp.Listdirectorydetails

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.