cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 7 janv. 2006 à 18:48
En fait j'en avais aussi besoin pour moi, donc je l'ai rapidement codé, ça donne quelque chose comme ceci (testé, fonctionne):
private
void GetFtpTree(
FTPClient ftp)
{
// Pour avoir toute l'arborescence, le ftp doit être ici à la racine
FTPFile[] files = ftp.DirDetails(
"");
// Tout ce qui se trouve à la racine
foreach (
FTPFile file
in files)
{
TreeNode node =
new
TreeNode(file.Name);
// On créer un Node pour le fichier en cours
this.treeView.Nodes.Add(node);
// On l'ajoute
if (file.Dir && !file.Name.StartsWith(
"."))
// Répertoire non-caché
{
ftp.ChDir(file.Name);
// On descend dans le sous-répertoire côté FTP
this.GetFTPSubTree(ftp, node);
// On appelle la méthode qui se charge de trouver les sous-arbres
}
}
}
FTPFile[] files = ftp.DirDetails(
"");
// On prend tout ce qui est à "l'étage" en cours
foreach (
FTPFile file
in files)
{
if (file.Dir && !file.Name.StartsWith(
"."))
// Répertoire non-caché
{
TreeNode newSubNode =
new
TreeNode(file.Name);
// Un créer un Node pour le nouveau répertoire
node.Nodes.Add(newSubNode);
// On l'ajoute au Node du répertoire courant
ftp.ChDir(file.Name);
// On descend dans le sous-répertoire côté FTP
this.GetFTPSubTree(ftp, newSubNode);
// Récursif : appelle la méthode pour le répertoire suivant
}
else node.Nodes.Add(file.Name);
// C'est un fichier, on l'ajoute au Node courant
}
ftp.CdUp();
// Fini pour ce répertoire, on remonte dans l'arborescence
}
Bien entendu, il faut encore gérer d'autres paramètres, comme par exemple mettre tout ceci dans un Thread, une barre de progression ou je ne sais quelle autres besoin tu as...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 7 janv. 2006 à 13:47
Salut,
Petite idée (je ne l'ai pas réalisée, mais je suis assez sûr que ca va marcher) :
Après avoir fait le login sur le serveur, tu récupères tout ce qui se trouve à la racine comme ceci (s'assurer que tu es bien à la racine, c'est à dire ne pas faire de ChDir() ):
FTPFile[] files = ftp.DirDetails(
""); // Tout les files de la racine
Ensuite le mieux me paraît de créer une méthode récursive, qui va aller dans chaque sous dossier; quelques chose dans ce genre (je l'ai vite tapée et pas testée, à toi de faire les modifs nécessaire):
private void GetAllFiles(FTPFile[] files
)
{
foreach (
FTPFile ftpF
in files)
{
if(ftpF.Dir) // C'est un répertoire, on rappelle la méthode récursivement
{
// Ajouter une arborescence ici
GetAllFiles(ftp.DirDetails(ftpF.Dir)); // Appelle récursif
}
else
{
// Ajouter le fichier à l'arborescence
}
}
}
Sinon tu trouveras sur le site des exemples de treeview pour savoir comment créer l'arborescent corretement
Neo020585
Messages postés178Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention 6 juillet 20094 14 janv. 2006 à 01:30
Je te remercie pour t'être penché sur mon problème^^
Le seul souci que je constate avec l'utilisation de cette librairie,
c'est que si le fichier ou dossier comporte un accent, une erreur se
produit.
J'ai moi aussi trouvé une méthode pour faire ce que je voulais, sauf
que je n'utilise pas de récursivité, pour la simple est bonne raison
que c'est beaucoup trop long !!!
J'ai donc utilisé une fonction qui liste tous ce qui est dans le
répertoire sélectionné et qui crée (ou pas) les nouveaux noeud en
conséquence.
Ce que je trouve étonnant, c'est que moi j'utilise directement l'objet
ftpConnection, alors que toi tu utilise plutot une des classe de la
librairie.
Je ne sais pas laquelle est la meilleur, mais faudra que je teste aussi la tienne.
Merci encore et bonne programmation.
Néo020585
La programmation, c'est l'art de découvrir
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 14 janv. 2006 à 14:34
Ha voui?
Ben si jamais tu fais ces tests, tu peux volentiers mettre les résultats ici, je serais bien intéressé de savoir si une méthode est plus rapide que l'autre...
Merci !