Je veux lister tous les fichiers et répertoires contenus dans un répertoire et sous-répertoires de ce répertoire. Si je choisissais C: \ comme répertoire, le programme obtiendrait chaque nom de chaque fichier et dossier du disque dur auquel il avait accès.
Une liste pourrait ressembler à
fd \ 1.txt fd \ 2.txt fd \ a \ fd \ b \ fd \ a \ 1.txt fd \ a \ 2.txt fd \ a \ a \ fd \ a \ b \ fd \ b \ 1.txt fd \ b \ 2.txt fd \ b \ a fd \ b \ b fd \ a \ a \ 1.txt fd \ a \ a \ a \ fd \ a \ b \ 1.txt fd \ a \ b \ a fd \ b \ a \ 1.txt fd \ b \ a \ a \ fd \ b \ b \ 1.txt fd \ b \ b \ a
c#
directory
subdirectory
getdirectories
derp_in_mouth
la source
la source
Réponses:
où
*.*
est le modèle pour faire correspondre les fichiersSi le répertoire est également nécessaire, vous pouvez procéder comme suit:
la source
Lsit<>
classe? Que renvoie GetFiles? Et qu'en est-il des noms de répertoires qui ont également été demandés?GetFiles
méthode renvoie un tableau de chaînes.Directory.GetFileSystemEntries
existe dans .NET 4.0+ et renvoie à la fois des fichiers et des répertoires. Appelez ça comme ça:Notez qu'il ne fera pas face aux tentatives de lister le contenu des sous-répertoires auxquels vous n'avez pas accès (UnauthorizedAccessException), mais cela peut être suffisant pour vos besoins.
la source
Utilisez les méthodes
GetDirectories
etGetFiles
pour obtenir les dossiers et fichiers.Utilisez également pour obtenir les dossiers et fichiers dans les sous-dossiers.
SearchOption
AllDirectories
la source
Path
propose des méthodes plus fiables.Path
pour supprimer une partie gauche fixe du chemin, par exemple `C:` dans l'exemple donné.path.SubString(2)
pour supprimer naïvement la lettre de lecteur et les deux points? Que faire si l'annuaire est un partage réseau? Je suggèrePath
comme méthode fiable car elle peut fournir des tas de goodies dans ce domaine. Dans ce cas, vous pouvez écrirefilePath.Substring(Path.GetPathRoot(filePath).Length)
. Oui, cela utilise Substring car c'est le plus concis.la source
J'ai peur, la
GetFiles
méthode renvoie la liste des fichiers mais pas les répertoires. La liste de la question m'invite à dire que le résultat doit également inclure les dossiers. Si vous voulez une liste plus personnalisée, vous pouvez essayer d'appelerGetFiles
et deGetDirectories
manière récursive. Essaye ça:Conseil: vous pouvez utiliser des classes
FileInfo
etDirectoryInfo
si vous avez besoin de vérifier un attribut spécifique.la source
Une version améliorée avec max lvl pour descendre dans le répertoire et option pour exclure les dossiers:
répertoire d'entrée:
sortie de la fonction (le contenu du dossier5 est exclu en raison de la limite lvl et le contenu du dossier3 est exclu car il se trouve dans le tableau des dossiers exclus):
la source
Vous pouvez utiliser FindFirstFile qui renvoie un handle puis caler récursivement une fonction qui appelle FindNextFile.C'est une bonne approche car la structure référencée serait remplie de diverses données telles que alternativeName, lastTmeCreated, modifié, attributs, etc.
Mais lorsque vous utilisez le framework .net, vous devrez entrer dans la zone non gérée.
la source
Si vous n'avez pas accès à un sous-dossier dans l'arborescence de répertoires, Directory.GetFiles s'arrête et lève l'exception résultant en une valeur nulle dans la chaîne de réception [].
Ici, voir cette réponse https://stackoverflow.com/a/38959208/6310707
Il gère l'exception à l'intérieur de la boucle et continue de travailler jusqu'à ce que tout le dossier soit parcouru.
la source
la manière logique et ordonnée:
la source
L'exemple suivant, le moyen le plus rapide (non parallélisé) répertorie les fichiers et les sous-dossiers dans une arborescence de répertoires qui gère les exceptions. Il serait plus rapide d'utiliser Directory.EnumerateDirectories à l'aide de SearchOption.AllDirectories pour énumérer tous les répertoires, mais cette méthode échouera si elle rencontre une exception UnauthorizedAccessException ou PathTooLongException.
Utilise le type de collection Stack générique, qui est une pile dernier entré, premier sorti (LIFO) et n'utilise pas de récursivité. Depuis https://msdn.microsoft.com/en-us/library/bb513869.aspx , vous permet d'énumérer tous les sous-répertoires et fichiers et de traiter efficacement ces exceptions.
la source
J'utilise le code suivant avec un formulaire qui a 2 boutons, un pour quitter et l'autre pour démarrer. Une boîte de dialogue de navigateur de dossier et une boîte de dialogue d'enregistrement de fichier. Le code est répertorié ci-dessous et fonctionne sur mon système Windows10 (64):
la source
Avec cela, vous pouvez simplement les exécuter et choisir le sous-dossier lorsque la console est exécutée
et c'est le patchar pour l'exportation XML
la source
la source
Un peu simple et lentement mais qui fonctionne !! si vous ne donnez pas de chemin de fichier, utilisez essentiellement le "fixPath", ce n'est qu'un exemple .... vous pouvez rechercher le type de fichier correct ce que vous voulez, j'ai fait une erreur lorsque j'ai choisi le nom de la liste car le "temporaireFileList est la liste de fichiers recherchée alors continuez ... et la "errorList" parle d'elle-même
la source
Créer une liste de chaînes
la source