Bonjour,
Comment tester si un répertoire est vide ?
Peut on le faire avec l'objet DirectoryInfo ? Pour l'instant je n'ai pas trouvé la méthode.
Merci de votre aide.
Johann
Version imprimable
Bonjour,
Comment tester si un répertoire est vide ?
Peut on le faire avec l'objet DirectoryInfo ? Pour l'instant je n'ai pas trouvé la méthode.
Merci de votre aide.
Johann
Pas bien sorcier pourtant :
Le test de nullité des tableaux est peut être inutile ou au contraire suffisant (je ne sais pas si ces méthodes renvoient un tableau null ou un tableau vide - à vérifier).Code:
1
2
3
4
5
6
7 bool IsDirectoryEmpty(string directoryName) { string[] fileNames = System.IO.Directory.GetFiles(directoryName); string[] subDirNames = System.IO.Directory.GetDirectories(directoryName); return (fileNames == null || fileNames.Length == 0) && (subDirNames == null || subDirNames.Length == 0); }
Salut.
Tu dois tester si ce répertoire contient des répertoires et des fichiers :
Bon courage ;)Code:
1
2
3
4
5
6 string myDirectory = @"C:\myDirectory"; if (Directory.Exists(myDirectory)) { if (Directory.GetDirectories(myDirectory).Length == 0 && Directory.GetFiles(myDirectory).Length == 0) { Console.WriteLine("{0} est vide", myDirectory); } }
[edit]pas assez rapide :P[/edit]
Encore moins sorcier :) :
Code:
1
2
3
4 if(Directory.GetFileSystemEntries(dirPath).Length == 0) Console.WriteLine("Dossier vide"); else Console.WriteLine("Dossier non vide");
J'ai fait une méthode.
En fait je pensais qu'il y avait une méthode qui pouvait faire ça pour un objet DirectoryInfo mais apparemment non.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 /* Methode qui test si un répertoire est vide. Retourne 'true' si c'est le cas. * Retourne 'false' si le répertoire ne contient pas de fichier où s'il n'existe pas. */ public static bool TestEmptyDirectory(string path) { bool result; try { DirectoryInfo dir = new DirectoryInfo(path); FileInfo[] f = dir.GetFiles(); if (f.Length == 0) { result = true; } else { result = false; } return result; } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } }
Fait attention par contre car il me semble que la methode GetFiles ne retourne que les fichiers contenu dans le répertoire mais pas les sous dossiers.
Si tu veux récuperer les fichiers et les sous-dossier il faut que tu utilises GetFileSystemInfos().
Pourquoi utilises-tu DirectoryInfo et non Directory?
@ BobbleDopple
J'ai réécrit ma méthode de test pour savoir si un répertoire est vide en m'appuyant sur ton code :
C'est plus court que ma méthode et ça fonctionne aussi bien.Code:
1
2
3 if(Directory.GetFileSystemEntries(dirPath).Length == 0) Console.WriteLine("Dossier vide"); else Console.WriteLine("Dossier non vide")
Par défaut, je sais que les dossiers que je vais analyser ne contiendront que des fichiers et pas de sous répertoires. Et j'ai plus tendance à utiliser l'objet DirectoryInfo car j'ai plus l'habitude de travailler avec cet objet. Mais bon si je peux faire ce que je veux avec un objet Directory, no problem.
Merci pour toutes vos réponses.
L'avantage des classes Directory et File sont qu'elles te permette d'effectuer des test sur tes fichiers sans allocation (ce qui est bon pour ta mémoire ^^)
Après si tu veux vraiment utiliser DirectoryInfo tu peux toujours faire :
Mais c'est moins propre et moins jolie (enfin je trouve :))Code:
1
2
3
4
5
6
7
8
9
10 // Si tu es sur que ton dossier ne contient que des fichiers if(new DirectoryInfo(path).GetFiles().Length == 0) Console.WriteLine("Dossier vide"); else Console.WriteLine("Dossier non vide") // Si ton dossier contient fichiers et sous-dossiers if(new DirectoryInfo(path).GetFileSystemInfos().Length == 0) Console.WriteLine("Dossier vide"); else Console.WriteLine("Dossier non vide")
oui , il utilise une méthode statique pour récupérer des objets.
renvoie un objet de type string[], il peut donc appeler la propriété Length de cet objet. Il faudrait lire le code avant de faire une remarque.Code:
1
2 Directory.GetFileSystemEntries(dirPath);
Si on ne comprends pas le code, avant de répondre, il faut tester!
:?