Compilare TreeView con dati FTP

giovedì 03 febbraio 2011 - 16.50

Qwertj Profilo | Newbie

Salve
Sto creando un client FTP e avevo bisogno di compilare un TreeView con le directory presente sul server e con i file al loro interno.
Per ottenere questi dati, mi servo dei metodi qui descritti (http://www.dotnethell.it/articles/FTP.aspx), usando ListFileDetails (così riesco a distinguere files da directories).
E' un po' che lavoro però a come "gerarchizzare" questi dati in un TreeView, ossia fare in modo che abbia un nodo per ogni file e directory e in ogni directory sottonodi corrispondenti a files che contengono o eventuali sottocartelle, e così via; ma non riesco a trovare un buon metodo.
L'idea era quella di utilizzare un'iterazione che mi esegue fin quando non trova più cartelle. Il problema è che non riesco bene a fare in modo che i files della cartella X vadano nella cartella X e non nella cartella Y che è gerarchicamente equivalente a X, non so se mi spiego

Spero mi possiate aiutare

Ciao
Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]

luigidibiasi Profilo | Guru

Ma vuoi scansionare tutte le cartelle FTP ed avere l'intero albero subito a disposizione oppure quando fai click su ogni nodo vai ad esplorarlo? (credo al seconda soluzione)
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

Qwertj Profilo | Newbie

Volevo scansionarlo tutto subito, non quando apro le cartelle
Ossia la prima O è migliore la seconda?
Voglio fare in modo che l'utente selezioni il file (o la cartella) da scaricare sul proprio PC nel treeview.


Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]

luigidibiasi Profilo | Guru

>Volevo scansionarlo tutto subito, non quando apro le cartelle
>Ossia la prima O è migliore la seconda?
dipende, se il sito da scansionare è grande e contiene molti file non so quanto potrebbe metterci...
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

luigidibiasi Profilo | Guru

io farei una cosa del genere... (molto spartana)
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

Qwertj Profilo | Newbie

If IsNothing(_parent) Then Me.tv.Nodes.Clear() Else _parent.Nodes.Clear() End If Dim Z As ftp = New ftp() Z.UserName = "" Z.Password = "" Z.Host = "" 'Directory nella root Dim lDir() As String = Z.ListDirectory(thedir).Split(vbLf) Dim dName As String For Each k As String In lDir If k = "" Then Exit Sub End If If Not k.Contains("<DIR>") Then Continue For End If dName = Mid(k, k.IndexOf("<DIR>") + 6, k.Length) dName = Replace(LTrim(RTrim(dName)), vbCr, "") Dim p As New System.Windows.Forms.TreeNode(dName, 0, 0) p.Tag = thedir & "/" & dName If IsNothing(_parent) Then Me.tv.Nodes.Add(p) Else _parent.Nodes.Add(p) End If

Non capisco il codice, potresti spiegarmelo meglio?
A cosa serve la stringa "<DIR>" che tiri fuori nel For?



Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]

luigidibiasi Profilo | Guru

a determinare se sei in presenza di una directory o di un file
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

Qwertj Profilo | Newbie

Fin lì c'ero .-.
Ma da dove sbuca? Perchè la funzione che restituisce la lista non lo fornisce, e nemmeno il wrapper che c'è nel progetto


Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]

luigidibiasi Profilo | Guru

in che senso non lo fornisce?
io da come vedo viene restituita una stringa che contiene la lista delle directory e dei file... poi tocca a te fare il parse della stringa....
non vorrei aver sbagliato progetto

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

Qwertj Profilo | Newbie

Io non uso quel wrapper lì però
Uso il "metodo" ListDirectoryDetails, che mi da una stringa del genere
'file -rw-rw-r-- 1 1323995 membri 262 Feb 2 11:11 File.txt 'cartella drwxrwxr-x 2 1323995 membri 4096 Feb 2 11:43 Cartella
Le quali si differenziano per la prima lettera: se è un file, è "-" altrimenti è "d"
Così io le distinguo.
Questa è la funzione che uso per ottenere i nomi dei file/cartelle
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e con questo distinguo file da cartelle
For Each F as String in ListFiles(URI, Credentials) If F.StartsWith("d") Then 'codice per le cartelle Else 'codice per i files End If Next



Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]

luigidibiasi Profilo | Guru

Vabè il concetto è lo stesso

alla fine ti rimane da creare la treeview e dovrebbe funzionare comunque
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

Qwertj Profilo | Newbie

Credo di aver risolto il problema!

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ho creato una classe Server come wrapper dei metodi e una struttura FolderInfo che mi memorizza Nome, URI e Nodo associato a una cartella


Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5