FTP - TreeView et ListView [Résolu]

Messages postés
178
Date d'inscription
lundi 10 mars 2003
Dernière intervention
6 juillet 2009
- 7 janv. 2006 à 01:26 - Dernière réponse :
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 7 janv. 2006 à 18:48
3
Merci
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

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 7 janv. 2006 à 13:47
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 7 janv. 2006 à 13:50
0
Merci
Commenter la réponse de cs_Bidou
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Dernière intervention
6 juillet 2009
- 14 janv. 2006 à 01:30
0
Merci
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
Commenter la réponse de Neo020585
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 14 janv. 2006 à 14:34
0
Merci
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
Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.