Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Algoritmo ricorsivo che si interrompe dopo due iterazioni
Forum - C# / VB.NET - [VB.NET] Algoritmo ricorsivo che si interrompe dopo due iterazioni

Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 19:08
Lunedì, 02/02/2015
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.

Codice sorgente - presumibilmente VB.NET

  1. Dim server As String = "ftp://dnha.altervista.org"
  2.  
  3.     Private Sub PopulateTreeView(ByVal dirNode As TreeNode, ByVal items() As String)
  4.         For i = 0 To items.Length
  5.             Dim name As String = items(i).Substring(items(i).LastIndexOf(" ") + 1, items(i).Length - items(i).LastIndexOf(" ") - 1)
  6.             If items(i).Substring(0, 1) = "-" Then   'Se è un file
  7.                 dirNode.Nodes.Add(name)
  8.             Else   'Se è una cartella
  9.                 PopulateTreeView(dirNode.Nodes.Add(name), GetListDirectoryDetails(server + dirNode.FullPath + name + "/"))
  10.             End If
  11.         Next
  12.     End Sub
  13.     Private Function GetListDirectoryDetails(ByVal url As String)
  14.         Dim reqFTP As FtpWebRequest = Nothing
  15.         reqFTP = DirectCast(WebRequest.Create(url), FtpWebRequest)
  16.         reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails
  17.         reqFTP.Credentials = New NetworkCredential("dnha", "$PASSWORD$")
  18.         Dim response = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
  19.         Dim responseStream As Stream = response.GetResponseStream()
  20.         Dim reader As New StreamReader(responseStream)
  21.         Dim items() As String = reader.ReadToEnd.Split({Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
  22.         Array.Sort(items)
  23.         Return items
  24.     End Function
  25.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  26.         PopulateTreeView(tvFiles.Nodes.Add("/"), GetListDirectoryDetails(server))
  27.         tvFiles.ExpandAll()
  28.     End Sub



dnha ha allegato un file: FZvsApp.PNG (46711 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da dnha il 02/02/2015 alle 19:09


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 20:23
Lunedì, 02/02/2015
Va un po' meglio:
ho trovato un errore di logica qua
Codice sorgente - presumibilmente C# / VB.NET

  1. For i = 0 To items.Length


e ho risolto così
Codice sorgente - presumibilmente C# / VB.NET

  1. For i = 0 To items.Length - 1



Comunque non fa ancora il suo lavoro :noway:


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 21:41
Lunedì, 02/02/2015
Adesso funziona :k: :

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2. Imports System.IO
  3.  
  4. Public Class frmMain
  5.  
  6.     Dim server As String = "ftp://dnha.altervista.org"
  7.  
  8.     Private Sub PopulateTreeView(ByVal dirNode As TreeNode, ByVal items() As String)
  9.         For i = 0 To items.Length - 1
  10.             Dim type As String = items(i).Substring(0, 1)
  11.             Dim name As String = items(i).Substring(1, items(i).Length - 1)
  12.             If type = "-" Then
  13.                 dirNode.Nodes.Add(name)
  14.             Else
  15.                 PopulateTreeView(dirNode.Nodes.Add(name), GetListDirectoryDetails(server + dirNode.FullPath.Replace("\", "/").Substring(1, dirNode.FullPath.Length - 1) + "/" + name))
  16.             End If
  17.         Next
  18.     End Sub
  19.     Private Function GetListDirectoryDetails(ByVal url As String)
  20.         Dim reqFTP As FtpWebRequest = Nothing
  21.         reqFTP = DirectCast(WebRequest.Create(url), FtpWebRequest)
  22.         reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails
  23.         reqFTP.Credentials = New NetworkCredential("dnha", "$PASSWORD$")
  24.         Dim response = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
  25.         Dim responseStream As Stream = response.GetResponseStream()
  26.         Dim reader As New StreamReader(responseStream)
  27.         Dim items() As String = reader.ReadToEnd.Split({Chr(10), Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
  28.         For i = 0 To items.Length - 1
  29.             items(i) = items(i).Substring(0, 1) + items(i).Substring(items(i).LastIndexOf(" ") + 1, items(i).Length - items(i).LastIndexOf(" ") - 1)
  30.         Next
  31.         Array.Sort(items)
  32.         Return items
  33.     End Function
  34.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  35.         PopulateTreeView(tvFiles.Nodes.Add("/"), GetListDirectoryDetails(server))
  36.         tvFiles.ExpandAll()
  37.     End Sub
  38. End Class



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


dnha ha allegato un file: Sort.PNG (5827 bytes)
Clicca qui per guardare l'immagine


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote