FTP - TreeView et ListView

Résolu
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 - 7 janv. 2006 à 01:26
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 14 janv. 2006 à 14:34
Bonjour tout le monde^^



Je vous explique mon problème :



Je désire réaliser un client FTP en C#.

J'utilise la librairie gratuite edtFtp pour me connecter, envoyer des fichier, les recuperer.....

J'aimerais construire l'arborescence du ftp (à l'aide d'un TreeView et si possible d'une listView)

J'ai beau avoir chercher sur le net, je n'ai rien trouvé d'interessant (y compris sur ce site).

Il y a bien des codes de réalisation d'un TreeView et d'une ListView, mais pas au niveau

de l'arborescence du FTP.



Si quelqu'un pouvais me venir en aide, j'en serai ravi.


Néo020585

La programmation, c'est l'art de découvrir

5 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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
}
}
}



private
void GetFTPSubTree(
FTPClient ftp,
TreeNode node)
{

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
}

Utilisation :



FTPClient ftp =
new
FTPClient(
myHost);
ftp.Login(
myLogin,

myPassword);

this.GetFtpTree(ftp);

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...


<HR>

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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


<HR>

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 janv. 2006 à 13:50
0
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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 !


<HR>

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
Rejoignez-nous