Oppure

Loading
02/02/15 18:08
dnha
Sto creando un programma che visualizza il contenuto remoto di un server FTP tramite il controllo TreeView:
il codice è chiaramente un algoritmo ricorsivo (per vedere il contenuto delle cartelle).
Dopo due iterazioni il codice si interrompe... qualcuno ha idea del perché? E soprattutto... Perché ExpandAll non funziona?

Allego lo screen comparativo tra FileZilla e la mia app.

    Dim server As String = "ftp://dnha.altervista.org"

    Private Sub PopulateTreeView(ByVal dirNode As TreeNode, ByVal items() As String)
        For i = 0 To items.Length
            Dim name As String = items(i).Substring(items(i).LastIndexOf(" ") + 1, items(i).Length - items(i).LastIndexOf(" ") - 1)
            If items(i).Substring(0, 1) = "-" Then   'Se è un file
                dirNode.Nodes.Add(name)
            Else   'Se è una cartella
                PopulateTreeView(dirNode.Nodes.Add(name), GetListDirectoryDetails(server + dirNode.FullPath + name + "/"))
            End If
        Next
    End Sub
    Private Function GetListDirectoryDetails(ByVal url As String)
        Dim reqFTP As FtpWebRequest = Nothing
        reqFTP = DirectCast(WebRequest.Create(url), FtpWebRequest)
        reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        reqFTP.Credentials = New NetworkCredential("dnha", "$PASSWORD$")
        Dim response = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As New StreamReader(responseStream)
        Dim items() As String = reader.ReadToEnd.Split({Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
        Array.Sort(items)
        Return items
    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PopulateTreeView(tvFiles.Nodes.Add("/"), GetListDirectoryDetails(server))
        tvFiles.ExpandAll()
    End Sub
Ultima modifica effettuata da dnha 02/02/15 18:09
aaa
02/02/15 19:23
dnha
Va un po' meglio:
ho trovato un errore di logica qua
For i = 0 To items.Length

e ho risolto così
For i = 0 To items.Length - 1


Comunque non fa ancora il suo lavoro :noway:
aaa
02/02/15 20:41
dnha
Adesso funziona :k: :

Imports System.Net
Imports System.IO

Public Class frmMain

    Dim server As String = "ftp://dnha.altervista.org"

    Private Sub PopulateTreeView(ByVal dirNode As TreeNode, ByVal items() As String)
        For i = 0 To items.Length - 1
            Dim type As String = items(i).Substring(0, 1)
            Dim name As String = items(i).Substring(1, items(i).Length - 1)
            If type = "-" Then
                dirNode.Nodes.Add(name)
            Else
                PopulateTreeView(dirNode.Nodes.Add(name), GetListDirectoryDetails(server + dirNode.FullPath.Replace("\", "/").Substring(1, dirNode.FullPath.Length - 1) + "/" + name))
            End If
        Next
    End Sub
    Private Function GetListDirectoryDetails(ByVal url As String)
        Dim reqFTP As FtpWebRequest = Nothing
        reqFTP = DirectCast(WebRequest.Create(url), FtpWebRequest)
        reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        reqFTP.Credentials = New NetworkCredential("dnha", "$PASSWORD$")
        Dim response = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As New StreamReader(responseStream)
        Dim items() As String = reader.ReadToEnd.Split({Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
        For i = 0 To items.Length - 1
            items(i) = items(i).Substring(0, 1) + items(i).Substring(items(i).LastIndexOf(" ") + 1, items(i).Length - items(i).LastIndexOf(" ") - 1)
        Next
        Array.Sort(items)
        Return items
    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PopulateTreeView(tvFiles.Nodes.Add("/"), GetListDirectoryDetails(server))
        tvFiles.ExpandAll()
    End Sub
End Class


Il problema ora è con Array.Sort() :grr: ... (V. Allegato)
C'è VB che ultimamente mi fa scherzi strani :rotfl:
aaa