Méthode pour obtenir tous les fichiers dans le dossier et sous-dossiers qui renvoie une liste
J'ai une méthode qui va parcourir un dossier et tous ses sous-dossiers et obtenir une liste des chemins d'accès aux fichiers. Cependant, je ne pouvais comprendre comment créer et ajouter des fichiers à une Liste publique, mais pas comment faire pour retourner la liste. Voici la méthode:
public List<String> files = new List<String>();
private void DirSearch(string sDir)
{
try
{
foreach (string f in Directory.GetFiles(sDir))
{
files.Add(f);
}
foreach (string d in Directory.GetDirectories(sDir))
{
DirSearch(d);
}
}
catch (System.Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}
Donc, je viens de l'appeler DirSearch()
à un certain moment dans mon code et il "remplit" la liste avec les chemins d'accès, mais je veux être en mesure de l'utiliser plusieurs fois pour créer différentes listes avec des répertoires différents, etc.
- Pourquoi ne pas définir la Liste des<String> 'fichiers' variable à l'intérieur d' 'DirSearch" et avoir "DirSearch" retour "fichiers"?
Vous devez vous connecter pour publier un commentaire.
et si vous ne voulez pas charger l'ensemble de la liste en mémoire et éviter le blocage, vous pouvez prendre un coup d'oeil à la
réponse suivante
.Vous pouvez utiliser Répertoire.GetFiles pour remplacer votre méthode.
Directory.GetFiles
, etDirectory.GetDirectory
dans la méthode d'assistance qui a les mêmes problèmes. La méthode d'assistance est mieux en un sens, il sera de ce fait plus d'entrées, mais les chances sont qu'il va avaler certains aussi (qui a les droits d'accès). Meilleure façon est d'utiliserDirectory.EnumerateDirectories
etDirectory.EnumerateFiles
qui vous donnera un accès séquentiel à l'itérateur, et puis vous pouvez vérifier l'autorisation pour chaque fichier/dossier.Simplement utiliser ce:
Et si vous voulez tous les fichiers, même extensionless: les
vous pouvez utiliser quelque chose comme ceci :
au lieu d'utiliser "." vous pouvez taper le nom du fichier ou simplement le type "*.txt"
aussi SearchOption.AllDirectories est à la recherche dans tous les sous-dossiers, vous pouvez le changer si vous voulez seulement un niveau
plus sur la façon de l'utiliser sur ici
Je ne suis pas sûr de pourquoi vous êtes en train d'ajouter des cordes à
files
, qui est déclarée comme un champ plutôt qu'une variable temporaire. Vous pouvez changer la signature deDirSearch
à:Et, après la
catch
bloc, ajouter:Alternativement, vous pouvez créer une variable temporaire à l'intérieur de votre méthode et de le retourner, ce qui me semble l'approche que vous pourriez désirer. Sinon, à chaque fois que vous appelez la méthode, les nouvelles chaînes trouvées seront ajoutés à la liste, comme avant, et vous serez d'avoir des doublons.
C'est pour toute personne qui cherche à obtenir une liste de tous les fichiers dans un dossier et ses sous-dossiers et de les enregistrer dans un document texte.
Ci-dessous le code complet, y compris la section “utilisation” des états, “espace de noms”, “classe”, “méthodes”, etc.
J'ai essayé de commenter autant que possible dans le code de sorte que vous pourriez comprendre ce que chaque partie est en train de faire.
Cela va créer un document texte qui contient une liste de tous les fichiers dans tous les dossiers et sous-dossiers d'un dossier racine. Après tout, à quoi bon une liste (comme dans la Console.WriteLine) si vous ne pouvez pas faire quelque chose avec elle.
Ici, j'ai créé un dossier sur le lecteur C appelé “Dossier1” et créé un dossier à l'intérieur que l'on appelle “Dossier2”. Ensuite, j'ai rempli folder2 avec un tas de fichiers, de dossiers et de fichiers et de dossiers dans les dossiers.
Cet exemple de code va récupérer tous les fichiers et de créer une liste dans un document texte et de la place que le texte du document dans Dossier1.
Attention: vous ne devriez pas enregistrer le document texte en Folder2 (le dossier de la lecture d'), ce serait juste une mauvaise pratique. Toujours l'enregistrer dans un autre dossier.
J'espère que cela aide quelqu'un en bas de la ligne.
Essayer cette
Programme de classe
{
static void main(string[] args)
{