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 :

Extraire fichiers d'un disque suivant extension C#3.5 Windows 7


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut Extraire fichiers d'un disque suivant extension C#3.5 Windows 7
    Bonjour,

    J'ai quelques PC sous windows 7 et j'aimerais extraire tous les éléments d'un certains types de ceux-ci.

    C'est à dire lister par exemple tous les fichiers en .jpg et .png (même dans les dossiers cachés) de mon disque C:/ et le copier sur un autre lecteur.

    J'ai trouvé ce bout de code pour lister les fichiers :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /////////////////////////////
    // Lister tous les fichiers d'un dossier (et ses sous-dossiers) :
    //
    // 'allFiles' est ma StringCollection contenant la liste complete de tous les fichiers
    //  Pourquoi une StringCollection ? Parce que les tableaux ont une taille fixe et 
    //  utiliser une StringCollection est le seul moyen de lister tous les fichiers de 
    //  dossiers et sous-dossiers.
    //  (Merci à Bidou !)
    //
    // 'path' le dossier sélectionné
    //
    // 'ext' la liste des extensions pour filtrer les fichiers listés
    //
    // 'scanDirOk' un boolean me permettant d'accepter les scans des sous-dossiers
    // 
    public StringCollection listAllFiles(StringCollection allFiles, string path, string ext, bool scanDirOk)
    {
        // listFilesCurrDir : Tableau contenant  la liste des fichiers du dossier 'path'
        string[] listFilesCurrDir = Directory.GetFiles(path, ext);
     
        // On lit le tableau 'listFilesCurrDir' 
        foreach (string rowFile in listFilesCurrDir)
        {
            // Si le fichier n'est pas deja dans la liste 'allFiles'
            if (allFiles.Contains(rowFile) == false)
            {
                // On ajoute le fichier (du moins son adresse) a 'allFiles'
                allFiles.Add(rowFile); 
            }
        }
        // Vide la table 'listFilesCurrDir'pour la prochaine liste de sous-dossiers
        listFilesCurrDir = null;
     
        // Si on autorise la lecture des sous-dossiers
        if (scanDirOk)
        {
            // On liste tous les sous-dossiers présents dans le 'path'
            string[] listDirCurrDir = Directory.GetDirectories(path);
     
            // Si il existe des sous-dossiers (si la liste n'est pas vide)
            if (listDirCurrDir.Length != 0)
            {
                // On lit le tableau 'listDirCurrDir'
                foreach (string rowDir in listDirCurrDir)
                {
                    // On relance la procédure pour qu'elle scanne chaque sous-dossier
                    listAllFiles(allFiles, rowDir, ext, scanDirOk);
                }
            }
            // Vide la table 'listDirCurrDir'pour la prochaine liste de sous-dossiers
            listDirCurrDir = null;
     
        }
        // On retourne 'allFiles'
        return allFiles;
    }
    Sauf qu'étant sous Win7, il est impossible d'accéder par le code à "C:\Documents and Settings" car c'est un dossier spécial (Or la plupart des élements sont dedans.

    J'avoue avoir besoin d'un coup de main sur ce coup là.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Il n'est pas nécessaire d'accéder au répertoire "C:\Documents and Settings" !!!
    Si tu veux obtenir tous les fichiers portants l'extension .jpg alors c'est dans les répertoires des profiles utilisateurs que tu y accéderas, ils se situent ici (s'ils n'ont pas été déplacés bien entendu) :

    Ensuite, si tu comptes parcourir l'intégralité de ton système depuis la racine : C:\, ça risque d'être bien plus compliqué qu'il n'y parait puisque le système d'exploitation possède des points de jonctions (JUNCTION, SYMLINK, SYMLINKD) qui correspondent à des attributs spécifiques. Le fait de parcourir simplement la racine en omettant la gestion de cette particularité risque d'une part de retourner des erreurs et d'autre part d'amener à boucler indéfiniment.

    Pour t'en rendre compte tapes ceci dans une fenêtre console :

    De plus, si tu comptes gérer dans ton projet des attributs de fichiers, tous ce qui attraits aux modifications système, je te suggère de paramétrer ton fichier Manifest à "RequireAdmin".

    Voici un exemple pour parcourir efficacement et rapidement les répertoires et fichiers du système d'exploitation, incluant la gestion des "Reparse Points" :

    http://stackoverflow.com/questions/2...ry-data-in-net

    PS : Bien entendu pour une manipulation basique de listing de fichiers tu peux utiliser la classe DirectoryInfo en gérant les exceptions :

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Bien regarder les paramètres de la méthode GetFiles qui permettent de définir une extension et le choix de parcourir dans les sous répertoires


    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    En fait, je suis passé par un bat utilisant la fonction windows Robocopy : http://superuser.com/a/481206

    Et ça a très bien marché.
    J'essaye maintenant de trouver un équivalent sous Linux.

    Merci encore.

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

Discussions similaires

  1. Copier Coller tous fichiers suivant extension
    Par arno21600 dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2011, 13h04
  2. Suppression fichier suivant extension
    Par petibonohm dans le forum Langage
    Réponses: 43
    Dernier message: 14/06/2007, 15h59
  3. charger un fichier texte du disque dur
    Par frol dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h09
  4. création de fichiers dans le disque dur
    Par sex-sansbol dans le forum ASP
    Réponses: 6
    Dernier message: 24/08/2004, 09h39
  5. [Stratégie][Fichier][Memoire]Scan disques volumineux
    Par Mobaladje dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 22/05/2004, 19h06

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