IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Tester si un répertoire est vide


Sujet :

C#

  1. #1
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut [C#] Tester si un répertoire est vide
    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

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pas bien sorcier pourtant :

    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);
    }
    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).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    Tu dois tester si ce répertoire contient des répertoires et des fichiers :
    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);
    	}
    }
    Bon courage

    [edit]pas assez rapide [/edit]

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    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");

  5. #5
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    J'ai fait une méthode.

    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;
                }
            }
    En fait je pensais qu'il y avait une méthode qui pouvait faire ça pour un objet DirectoryInfo mais apparemment non.

  6. #6
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    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?

  7. #7
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    @ BobbleDopple

    J'ai réécrit ma méthode de test pour savoir si un répertoire est vide en m'appuyant sur ton code :

    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")
    C'est plus court que ma méthode et ça fonctionne aussi bien.


    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.

  8. #8
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    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 :

    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")
    Mais c'est moins propre et moins jolie (enfin je trouve )

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Johann7751 Voir le message
    un objet Directory
    Directory n'est pas un objet (il n'est pas instanciable) mais une classe statique.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Directory n'est pas un objet (il n'est pas instanciable) mais une classe statique.

    oui , il utilise une méthode statique pour récupérer des objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Directory.GetFileSystemEntries(dirPath);
    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.

    Si on ne comprends pas le code, avant de répondre, il faut tester!
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  11. #11
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Directory.GetFileSystemEntries(dirPath);
    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.

    Si on ne comprends pas le code, avant de répondre, il faut tester!
    Il me semble que toutes les personnes qui ont répondu à ce post ont utilisé la propriété Length dans leur code. Je ne comprends pas bien ta remarque...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tester si un répertoire est vide
    Par guefrachi dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/01/2018, 19h13
  2. tester si un répertoire est vide
    Par laurentSc dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2010, 10h32
  3. [Batch] comment tester qu'un répertoire est vide ?
    Par JiCeBe dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 18/08/2009, 23h08
  4. Tester si une table est vide
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 01/07/2004, 16h25
  5. [JDBC]tester si une table est vide
    Par zozolh2 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/05/2004, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo