获取将返回列表的文件夹和子文件夹中的所有文件的方法

Wil*_*son 44 c# directory methods recursion file

我有一个方法将遍历文件夹及其所有子文件夹并获取文件路径列表.但是,我只能弄清楚如何创建它并将文件添加到公共列表,而不是如何返回列表.这是方法:

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以,我只是DirSearch()在我的代码中调用某个点并用路径"填充"列表,但我希望能够多次使用它来创建具有不同目录的不同列表等.

Til*_*lak 135

您可以使用Directory.GetFiles替换您的方法.

 Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories)
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的,但你在helper方法中使用`Directory.GetFiles`和`Directory.GetDirectory`具有相同的问题.辅助方法在某种意义上更好,它会产生更多的条目,但也有可能吞下一些(具有访问权限).更好的方法是使用`Directory.EnumerateDirectories`和`Directory.EnumerateFiles`,它将为您提供对迭代器的顺序访问,然后您可以检查每个文件/文件夹的权限. (8认同)

Dar*_*rov 48

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;
}
Run Code Online (Sandbox Code Playgroud)

如果你不想在内存中加载整个列表并避免阻塞,你可以看一下following answer.


Tom*_*zzo 22

只需使用:

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

如果你想要每个文件,甚至是无扩展文件:

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


小智 13

你可以使用这样的东西:

string [] filePaths = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

而不是使用" . "你可以输入文件的名称或只是类型"*.txt",SearchOption.AllDirectories是搜索所有子文件夹,你可以改变,如果你只想要一个更多的关于如何使用它在这里