搜索所有文件夹和子文件夹

时间:2018-08-28 16:58:21

标签: c#

我需要搜索所有文件夹和子文件夹以找到图像文件。 我的问题是我无法在网络目录上搜索,并且使用此代码,它只能找到onde文件夹,而不是所有文件夹和子文件夹。有什么帮助吗?谢谢。 我所拥有的:

private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
    List<string> filesList = new List<string>();
    // Create the new DataTable to be used
    tableWithPhotos = new DataTable();
    tableWithPhotos.Columns.Add("Nome e formato do ficheiro (duplo clique para visualizar a imagem)");
    tableWithPhotos.Columns.Add("Caminho ( pode ser copiado Ctrl+C )");
    var diretorios = new List<string>() {@"C:\Users\myfolder\pictures"};
    var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
    foreach (string entryExtensions in extensoes)
    {
        foreach (string entryDirectory in diretorios)
        {
        filesList.AddRange(Directory.GetFiles(entryDirectory, entryExtensions, SearchOption.TopDirectoryOnly));
        }
    }

2 个答案:

答案 0 :(得分:1)

您的直接问题是您为TopDirectoryOnly指定了SearchOptions。应该是AllDirectories

filesList.AddRange(Directory.GetFiles(entryDirectory, entryExtensions, SearchOption.AllDirectories));

要补充答案,我认为您可以简化流程。用一个目录创建一个字符串列表没有任何意义。我说的是这一行:

var diretorios = new List<string>() {@"C:\Users\myfolder\pictures"};

相反,请执行以下操作:

var topDir = @"C:\Users\myfolder\pictures";
var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
foreach (string ext in extensoes)
{
    var files = Directory.EnumerateFiles(topDir, ext, SearchOption.AllDirectories);
    // Add to list.
}

我鼓励使用EnumerateFiles()而不是GetFiles(),因为它更快,尤其是如果文件数量很多的时候。请参阅this答案。

答案 1 :(得分:0)

这是我需要做的:

filesList.AddRange(Directory.EnumerateFiles(allDir, ext, SearchOption.AllDirectories));