Вложенные циклы foreach для добавления DirectoryInfo.GetDirectories и GetFiles в массив? - PullRequest
1 голос
/ 21 декабря 2011

Как бы я перебрал каждую папку в определенном пути к файлу, а затем для каждой из найденных папок перебрал бы каждый из своих файлов?

        DirectoryInfo dir = new DirectoryInfo(@"C:\Path");

        foreach (DirectoryInfo folders in dir.GetDirectories())

        foreach (DirectoryInfo files in folders.GetFiles())

Ответы [ 5 ]

3 голосов
/ 21 декабря 2011

Если то, что вы ищете, это список PDF-файлов в каталоге, и это дети, вы можете сделать это.

DirectoryInfo di = new DirectoryInfo("c:\\output");
FileInfo[] files = di.GetFiles("*.pdf", SearchOption.AllDirectories);
foreach (var fileInfo in files)
{
     // do whatever you need
}
2 голосов
/ 21 декабря 2011

Ваша точка с запятой на втором foreach может вызывать у вас горе, в противном случае ваш код должен работать с небольшими изменениями.

        DirectoryInfo dir = new DirectoryInfo(@"C:\Path");
        foreach (DirectoryInfo folder in dir.GetDirectories())
        {
            foreach (FileInfo file in folder.GetFiles())
            { 
               // do stuff with file
            }
        }
1 голос
/ 21 декабря 2011

Название вашего вопроса не совсем соответствует основной части вопроса. Я думаю, что вы хотите, чтобы добавить все файлы во всех подкаталогах в одном массиве.

Один из способов сделать это:

DirectoryInfo dir = new DirectoryInfo(@"C:\Path");

List<FileInfo> files = new List<FileInfo>();

foreach (DirectoryInfo folder in dir.GetDirectories())
    foreach (FileInfo file in folder.GetFiles())
    {
        files.Add(file);
    }

// files contains your list of files
0 голосов
/ 21 декабря 2011

Pfft.

foreach(var file in new DirectoryInfo(@"C:\Path")
                            .GetDirectories()
                            .SelectMany(x => x.GetFiles()))
    // linq baby

(кстати, похвалы об использовании DI и FI, два из наиболее полезных, но игнорируемых классов в платформе)

0 голосов
/ 21 декабря 2011
DirectoryInfo dir = new DirectoryInfo(@"C:\Path");

foreach (DirectoryInfo folders in dir.GetDirectories())
{
   foreach (FileInfo files in folders.GetFiles())
   {
     //Do something

   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...