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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 [/edit]
Encore moins sorcier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Directory.GetFileSystemEntries(dirPath);
Si on ne comprends pas le code, avant de répondre, il faut tester!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager