it-swarm.com.de

Methode zum Abrufen aller Dateien in Ordnern und Unterordnern, die eine Liste zurückgeben

Ich habe eine Methode, die einen Ordner und alle seine Unterordner durchläuft und eine Liste der Dateipfade erhält. Ich konnte jedoch nur herausfinden, wie man es erstellt und die Dateien zu einer öffentlichen Liste hinzufügt, nicht aber, wie man die Liste zurückgibt. Hier ist die Methode:

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

Also rufe ich einfach DirSearch() in meinem Code auf und füllt die Liste mit den Pfaden, aber ich möchte sie mehrmals verwenden können, um verschiedene Listen mit verschiedenen Verzeichnissen usw.

37
Wilson
private List<String> DirSearch(string sDir)
{
    List<String> files = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(sDir))
        {
            files.Add(f);
        }
        foreach (string d in Directory.GetDirectories(sDir))
        {
            files.AddRange(DirSearch(d));
        }
    }
    catch (System.Exception excpt)
    {
        MessageBox.Show(excpt.Message);
    }

    return files;
}

und wenn Sie nicht die gesamte Liste in den Speicher laden möchten und das Blockieren vermeiden möchten, können Sie den following answer betrachten.

38
Darin Dimitrov

Sie können Directory.GetFiles verwenden, um Ihre Methode zu ersetzen.

 Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories)
122
Tilak

Verwenden Sie einfach folgendes:

public static List<String> GetAllFiles(String directory)
{
    return Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories).ToList();
}

Und wenn Sie jede Datei haben möchten, auch die ohne Erweiterungen:

public static List<String> GetAllFiles(String directory)
{
    return Directory.GetFiles(directory, "*", SearchOption.AllDirectories).ToList();
}
19

sie können so etwas verwenden:

string [] filePaths = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);

anstatt "." zu verwenden, können Sie den Namen der Datei oder nur den Typ wie "* .txt" eingeben. SearchOption.AllDirectories dient zum Suchen in allen Unterordnern, die Sie ändern können, wenn Sie nur einen haben möchten Ebene Weitere Informationen zur Verwendung von hier

12
sam

Ich bin nicht sicher, warum Sie die Zeichenfolgen zu files hinzufügen, das als Feld und nicht als temporäre Variable deklariert ist. Sie können die Signatur von DirSearch folgendermaßen ändern:

private List<string> DirSearch(string sDir)

Fügen Sie nach dem catch-Block Folgendes hinzu:

return files;

Alternativ können Sie eine temporäre Variable in Ihrer Methode erstellen und zurückgeben. Dies scheint mir der Ansatz zu sein, den Sie wünschen. Andernfalls werden die neu gefundenen Zeichenfolgen bei jedem Aufruf dieser Methode der gleichen Liste wie zuvor hinzugefügt, und Sie haben Duplikate.

2
Mir

Dies ist für jeden, der versucht, eine Liste aller Dateien in einem Ordner und seinen Unterordnern abzurufen und in einem Textdokument zu speichern. Nachfolgend finden Sie den vollständigen Code, einschließlich der Anweisungen "using", "Namespace", "Klasse", "Methoden" usw. Ich habe versucht, im gesamten Code so viel wie möglich zu kommentieren, damit Sie verstehen, was jeder Teil tut . Dadurch wird ein Textdokument erstellt, das eine Liste aller Dateien in allen Ordnern und Unterordnern eines bestimmten Stammordners enthält. Was nützt eine Liste (wie in Console.WriteLine), wenn Sie damit nichts anfangen können. Hier habe ich auf dem Laufwerk C einen Ordner mit dem Namen "Folder1" und einen Ordner mit dem Namen "Folder2" erstellt. Als nächstes füllte ich Ordner2 mit einer Reihe von Dateien, Ordnern und Dateien und Ordnern in diesen Ordnern. Dieser Beispielcode ruft alle Dateien ab, erstellt eine Liste in einem Textdokument und platziert dieses Textdokument in Folder1. Achtung: Sie sollten das Textdokument nicht in Folder2 (dem Ordner, in dem Sie gerade lesen) speichern. Dies wäre nur eine schlechte Praxis. Speichern Sie es immer in einem anderen Ordner.
Ich hoffe, das hilft jemandem weiter.

using System;
using System.IO;

namespace ConsoleApplication4
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Create a header for your text file
            string[] HeaderA = { "****** List of Files ******" };
            System.IO.File.WriteAllLines(@"c:\Folder1\ListOfFiles.txt", HeaderA);

            // Get all files from a folder and all its sub-folders. Here we are getting all files in the folder
            // named "Folder2" that is in "Folder1" on the C: drive. Notice the use of the 'forward and back slash'.
            string[] arrayA = Directory.GetFiles(@"c:\Folder1/Folder2", "*.*", SearchOption.AllDirectories);
            {
                //Now that we have a list of files, write them to a text file.
                WriteAllLines(@"c:\Folder1\ListOfFiles.txt", arrayA);
            }

            // Now, append the header and list to the text file.
            using (System.IO.StreamWriter file =
                new System.IO.StreamWriter(@"c:\Folder1\ListOfFiles.txt"))
            {
                // First - call the header 
                foreach (string line in HeaderA)
                {
                    file.WriteLine(line);
                }

                file.WriteLine(); // This line just puts a blank space between the header and list of files. 


                // Now, call teh list of files.
                foreach (string name in arrayA)
                {
                    file.WriteLine(name);
                }

            }
          }


        // These are just the "throw new exception" calls that are needed when converting the array's to strings. 

        // This one is for the Header.
        private static void WriteAllLines(string v, string file)
        {
            //throw new NotImplementedException();
        }

        // And this one is for the list of files. 
        private static void WriteAllLines(string v, string[] arrayA)
        {
            //throw new NotImplementedException();
        }



    }
}
1
Aubrey Love

Versuche dies
Klassenprogramm { static void Main (Zeichenfolge [] Argumente) {

        getfiles get = new getfiles();
        List<string> files =  get.GetAllFiles(@"D:\Rishi");

        foreach(string f in files)
        {
            Console.WriteLine(f);
        }


        Console.Read();
    }


}

class getfiles
{
    public List<string> GetAllFiles(string sDirt)
    {
        List<string> files = new List<string>();

        try
        {
            foreach (string file in Directory.GetFiles(sDirt))
            {
                files.Add(file);
            }
            foreach (string fl in Directory.GetDirectories(sDirt))
            {
                files.AddRange(GetAllFiles(fl));
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }



        return files;
    }
}
0
Ris
String[] allfiles = System.IO.Directory.GetFiles("path/to/dir", "*.*", System.IO.SearchOption.AllDirectories);
0
veeresh i