Lister [Résolu]

24 ans 231 Messages postés lundi 27 novembre 2000Date d'inscription 7 juillet 2008 Dernière intervention - 25 oct. 2005 à 12:01 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
t_barbillon 341 Messages postés mercredi 8 juin 2005Date d'inscription 10 février 2009 Dernière intervention - 25 oct. 2005 à 16:36
+3
Utile
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)

>.....
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de t_barbillon
t_barbillon 341 Messages postés mercredi 8 juin 2005Date d'inscription 10 février 2009 Dernière intervention - 25 oct. 2005 à 12:29
0
Utile
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;

}

}
Commenter la réponse de t_barbillon
t_barbillon 341 Messages postés mercredi 8 juin 2005Date d'inscription 10 février 2009 Dernière intervention - 25 oct. 2005 à 12:33
0
Utile
[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().
Commenter la réponse de t_barbillon
24 ans 231 Messages postés lundi 27 novembre 2000Date d'inscription 7 juillet 2008 Dernière intervention - 25 oct. 2005 à 13:47
0
Utile
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é?
Commenter la réponse de 24 ans
24 ans 231 Messages postés lundi 27 novembre 2000Date d'inscription 7 juillet 2008 Dernière intervention - 25 oct. 2005 à 15:42
0
Utile
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
Commenter la réponse de 24 ans
24 ans 231 Messages postés lundi 27 novembre 2000Date d'inscription 7 juillet 2008 Dernière intervention - 26 oct. 2005 à 10:48
0
Utile
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
Commenter la réponse de 24 ans
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 26 oct. 2005 à 11:49
0
Utile
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 );
}
}
}
Commenter la réponse de Lutinore

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.