【问题标题】:Search all folders and subfolders搜索所有文件夹和子文件夹
【发布时间】:2018-08-28 16:58:21
【问题描述】:

我需要搜索所有文件夹和子文件夹以查找图像文件。 我的问题是我无法在网络目录上搜索,并且使用此代码,它只能找到 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));
        }
    }

【问题讨论】:

  • 因为您已指定搜索选项TopDirectoryOnly。让它AllDirectories.
  • 在您的一个问题中,您确实已经准备好了答案,stackoverflow.com/questions/51984123/… 我确实为此专门为您发表了评论

标签: c#


【解决方案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(),因为它更快,尤其是如果您有大量 if 文件。见this答案。

【讨论】:

  • 好的。很好的帮助。但我需要将所有文件添加到数据表中:// And now here we will add all the files that it has found into the DataTable foreach (string entryFiles in filesList) { DataRow row = tableWithPhotos.NewRow(); row[0] = Path.GetFileName(entryFiles); row[1] = entryFiles; tableWithPhotos.Rows.Add(row); }
  • 我认为这可以做我想做的事:filesList.AddRange(Directory.EnumerateFiles(allDir, ext, SearchOption.AllDirectories));
【解决方案2】:

这是我需要做的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多