Lister

Résolu
24 ans Messages postés 231 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 7 juillet 2008 - 25 oct. 2005 à 12:01
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 26 oct. 2005 à 11:49
je veux lister les fichier qui se trouve dans un repertoire père ainsi dans les sous repertoire
comment faire je suis débutant

7 réponses

t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
25 oct. 2005 à 16:36
Salut, l'exemple précédent n'était pas simple, à cause du pb de
dimensionnement du tableau, alors pour éclairer ta lanterne sur la
récursivité voici autre chose



public void GetAllFiles(string Path)

{

//Pour tous les fichiers présents dans le dossier courant

foreach(string File in System.IO.Directory.GetFiles(Path))

{

//Ajouter le nom à MyListBox

MyListBox.Items.Add(File);

}

//Pour tous les dossiers présents dans le dossier courant

foreach (string Folder in System.IO.Directory.GetDirectories(Path))

{

//Réexecuter la fonction

GetAllFiles(Folder);

}

}



Ce qui donne dans le cas d'une arborescence

MonDossierN1

|_MonDossierN2_A

| |_MonDossierN3_A

|_MonDossierN2_B



>Itération 1 : Listage des fichiers du dossier MonDossierN1

>Itération 2 : Listage des fichiers du dossier MonDossierN2_A (premier dossier fils)

>Itération 3 : Listage des fichiers du dossier MonDossierN3_A

>Itération 4 : Listage des fichiers du dossier MonDossierN2_B (second dossier fils)

>.....
3
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
25 oct. 2005 à 12:29
Salut, tu fais une fonction récursive qui utilise les fonction
System.IO.Directory.GetFiles() System.IO.Directory.GetDirectories(),
comme ça tu liste tous les fichiers présent dans le dossier parant puis
tous ses sous dossiers, et pour chacun d'eux tu réappelle la méthode
System.IO.Directory.GetFiles().

En fait cela va te donner un truc du style :





public static string[] GetAllFiles(string Path)

{

string[] AllFiles = new string[GetFilesCount(Path, true)];

GetAllFiles(Path, ref AllFiles);

return AllFiles;

}



avec :

public static int GetFilesCount(string Path, bool Deep)

{

int FilesCount = System.IO.Directory.GetFiles(Path, "*.*").Length;



//Vérification de la récursivité

if (Deep == true)

{

string[] folders = System.IO.Directory.GetDirectories(Path);

foreach (string folder in folders)

{


FilesCount +=
GetFilesCount(folder, Deep);

}

}

return FilesCount;

}



et aussi avec

//Obtention de tous les fichiers présent

private static void GetAllFiles(string Path, ref string[] FilesContainer)

{

int FilesIndex = 0;



//Aquisition des fichiers présent dans le dossier courant

string[] Temp = GetFiles(Path, "*.*", 1);

Temp.CopyTo(FilesContainer, FilesIndex);

FilesIndex = Temp.Length;



//Aquisition des fichiers présent dans les dossiers enfants

string[] Folders = System.IO.Directory.GetDirectories(Path);

foreach(string Folder in Folders)

{

//Aquisition des fichiers présent dans le dossier courant

Temp = new string[GetFilesCount(Folder, false)];

GetAllFiles(Folder, ref Temp);

Temp.CopyTo(FilesContainer, FilesIndex);

FilesIndex += Temp.Length;

}

}
0
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
25 oct. 2005 à 12:33
[Suite et fin]

La fonction n'est pas du tout optimisée, tu peux supprimer la méthode
GetFilesCount(string Path, bool Deep). Au lieu d'allouer tout de suite
un tableau à la bonne dimension, tu stocke le retour private static
void GetAllFiles(string Path, ref string[] FilesContainer) dans un
tableau temporaire que tu recopies dans ton tableau définitif avec
Array.CopyTo().
0
24 ans Messages postés 231 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 7 juillet 2008 2
25 oct. 2005 à 13:47
j' ai utilisé cette source mais un message d'erreur est survenu: Le tableau de destination n'est pas assez long. Vérifiez destIndex et la longueur, ainsi que les limites inférieures du tableau.
que doit je faire je suis faible dans la récursivité?
0

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

Posez votre question
24 ans Messages postés 231 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 7 juillet 2008 2
25 oct. 2005 à 15:42
et ben lorsque l'hiérarchie est egale 2 ou plus le message précédent s'affiche qu'elle est la solution svp c'est trop urgent
0
24 ans Messages postés 231 Date d'inscription lundi 27 novembre 2000 Statut Membre Dernière intervention 7 juillet 2008 2
26 oct. 2005 à 10:48
le cas local ,c'est marché trés bien mais j'ai besoin aussi de faire la même chose mais dans mon compte ftp comment procéder ? sachant que j'ai télécharger une dll qui me permet de se connecter un serveur ftp et de télécharger des fichiers.
si vous voulez je vous envoie cette dll par mail pour en savoire plus.
je suis heureux pour votre aide
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 oct. 2005 à 11:49
Salut, les deux boucles foreach ça me rappelle la méthode récursive pour copier les fichiers des sous répertoires. une autre version:

public void GetAllFiles( string path )
{
foreach( string entrie in Directory.GetFileSystemEntries( path ) )
{
if ( File.Exists( entrie ) )
{
tb.AppendText( entrie + "\r\n" );
}
else
{
GetAllFiles( entrie );
}
}
}
0
Rejoignez-nous