搜索文件夹范围

问题描述 投票:-2回答:1

我必须搜索很多文件夹。我有一个像这样的网络目录结构:

    \\share\folder0000
    \\share\folder1000
    \\share\folder2000
    \\share\folder3000

在每个文件夹里面我有这样的东西:

    \\share\folder1000\1000
    \\share\folder1000\1001
    \\share\folder1000\1002
    \\share\folder1000\1003

我需要找到很多文件但是搜索所有文件夹我想要搜索一系列文件夹,因为它会更快。查看一系列文件夹可能是个好主意,例如:从“\ share \ folder1000 \ 1000”搜索到\ share \ folder1000 \ 1100“,而不是写所有目录。

有什么建议吗?谢谢。我的代码如下:

var diretorios = new List<string>() { @"\\share\folder1000\1000" };
// What extensions that we want to search
var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
// This 2 foreach are to search for the files with the extension that is on the extensoes and on all directories that are on diretorios
// In for foreach we go through all the extensions that we want to search
foreach (string entryExtensions in extensoes)
{
// Now we must go through all the directories to search for the extension that is on the entryExtensions
foreach (string entryDirectory in diretorios)
{
// SearchOption.AllDirectories search the directory and sub directorys if necessary
filesList.AddRange(Directory.GetFiles(entryDirectory, entryExtensions, SearchOption.AllDirectories));
}
}
// And now here we will add all the files that it has found into the DataTable
foreach (string entryFiles in filesList)
{
c# range directory
1个回答
0
投票

尝试类似的东西:

var extensoes = new List<string>() { "*.jpg", "*.bmp", "*.png", "*.tiff", "*.gif" };
foreach(var folderNumber in Enumerable.Range(1000, 11).ToList())
{
    var folderToSearch = $@"\\share\folder1000\{folderNumber}";
}

这使得所有文件夹介于1000和1011之间。

更新

使用SearchOption.AllDirectories所需的只是root / base文件夹列表。然后,它会为您提供所有子文件夹中所有文件的列表,然后按扩展名进行过滤。 EnumerateFilesGetFilesfor大型系列更有效。

var extensoes = new List<string>() { ".jpg", ".bmp", ".png", ".tiff", ".gif" };
//  set up list of root folders
foreach (var folderNumber in Enumerable.Range(1000, 11).ToList())
{
    var folderToSearch = $@"\\share\folder{folderNumber}";
    List<string> fileList = Directory.EnumerateFiles(
                                   folderToSearch, "*.*",
                                   SearchOption.AllDirectories)
                                      .Select(x => Path.GetFileName(x))
                                      .Where(x => extensoes.Contains(Path.GetExtension(x)))
                                      .ToList();
    Console.WriteLine(fileList.Count());
    foreach (var fileName in fileList)
    {
        Console.WriteLine(fileName);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.