Диапазон поиска папок - PullRequest
0 голосов
/ 31 августа 2018

Я должен искать по множеству папок. У меня есть структура сетевой директории, как это:

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

Внутри каждой папки у меня есть что-то вроде этого:

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

Мне нужно найти много файлов, но для поиска по всем папкам я хочу искать по ряду папок, потому что это будет быстрее. Возможно, было бы неплохо взглянуть на ряд папок, таких как: Выполните поиск из "\ share \ folder1000 \ 1000 to \ 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)
{

1 Ответ

0 голосов
/ 31 августа 2018

Попробуйте что-то вроде:

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 все, что вам нужно, это список корневых / базовых папок. Это тогда дает вам список всех файлов во всех подпапках, которые затем фильтруются по расширению. EnumerateFiles более эффективно, чем GetFiles для больших коллекций.

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...