Поиск файлов в определенной папке в разных каталогах - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно найти много файлов (изображений) в определенной папке (например, CR7), в разных каталогах. Представьте, что у меня есть сетевой ресурс, который я должен найти и отобразить все изображения в этой конкретной папке (CR7). Папку CR7 можно найти в разных местах, таких как: \\share\folder01\CR7 или: \\share\folder01\folder02\CR7 или что-нибудь еще. Вот что у меня есть, но результаты из filesList не идут в datagridview:

public partial class FormProcuraFotos : Form
{
    DataTable tableWithPhotos;
    public FormProcuraFotos()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        progressBar1.Visible = true;
        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += this.Worker_DoWork;
        worker.RunWorkerCompleted += this.Worker_RunWorkerCompleted;
        worker.RunWorkerAsync();
    }
    private void Worker_DoWork(object sender, DoWorkEventArgs e)
    {
        // Create the new DataTable to be used
        tableWithPhotos = new DataTable();
        tableWithPhotos.Columns.Add("Filenames");
        tableWithPhotos.Columns.Add("Ctrl+C");
        //Find files on a specific folder (CR7)
        string allDir = @"\\server\folder01";
        var CR7Directories = Directory.EnumerateDirectories(allDir, "CR7", SearchOption.AllDirectories);
        List<string> extensions = new List<string>() { ".jpg", ".bmp", ".png", ".tiff", ".gif" };
        List<string> filesList = new List<string>();
        foreach (var dir in CR7Directories)
        {
            List<string> FileNames = new DirectoryInfo(dir).EnumerateFiles(dir)
                                                           .Where(x => extensions.Contains(x.Extension))
                                                           .Select(x => x.Name).ToList();
            filesList.AddRange(FileNames);
        }
        // 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);
        }
    }
    private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        progressBar1.Visible = false;
        var formToOpen = new FormResultadosFotos(tableWithPhotos);
        formToOpen.Show();
    }
}

1 Ответ

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

Я думаю, что вы должны разделить выполнение на следующие шаги:

  • Получить все каталоги с именем "CR7" в указанной папке, указав "CR7" как searchPattern.
  • Теперь у вас есть все пути к папкам CR7, итерация по этой коллекции и получение списка файлов и фильтрация их по списку расширений в каждом каталоге CR7.

Не могли бы вы попробовать это и сообщить мне, решили ли это ваши проблемы:

string allDir = @"\\share\folder01";
var CR7Directories = Directory.EnumerateDirectories(allDir, "CR7", SearchOption.AllDirectories);
List<string> extensions = new List<string>() { ".jpg", ".bmp", ".png", ".tiff", ".gif" };
List<string> filesList = new List<string>();
foreach (var dir in CR7Directories)
{
    List<string> FileNames = new DirectoryInfo(dir).EnumerateFiles(dir)
                                                   .Where(x => extensions.Contains(x.Extension))
                                                   .Select(x => x.Name).ToList();
    filesList.AddRange(FileNames);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...