Самый простой способ найти все файлы в каталоге, включая все, кроме одного подкаталога? - PullRequest
0 голосов
/ 22 февраля 2011

В .NET

        DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
        FileInfo[] allFiles = dirInfo.GetFiles("*.*", SearchOption.AllDirectories);

доставит вам все файлы, включая все файлы в его подкаталогах.

Что делать, если мне нужны все файлы, кроме одного подкаталога.

Какой самый простой и / или самый эффективный способ сделать это?

Я нахожусь в .NET 4.0, c #

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Попробуйте:

DirectoryInfo dirInfo = new DirectoryInfo(searchDirectory);
List<FileInfo> allFiles = new List<FileInfo>();
allFiles.AddRange(dirInfo.GetFiles());

foreach (DirectoryInfo di in dirInfo.GetDirectories())
{
    if (di.Name != "DirIDontWant")
    {
        allFiles.AddRange(di.GetFiles("*.*", SearchOption.AllDirectories));
    }
}
3 голосов
/ 14 января 2016

IntelliSense и MSDN помогли мне понять это:

List<string> lFiles = new List<string>();
lFiles.AddRange(Directory.GetFiles(lPath, "*", SearchOptions.AllDirectories));

Функция GetFiles определена для MSDN здесь . Первый параметр - это каталог для поиска; второй параметр - это фильтр (* - это подстановочный знак для получения всех файлов), третий параметр - флаг, указывающий, следует ли получать только файлы в указанном каталоге или во всех подкаталогах.

0 голосов
/ 18 января 2013

как предложено в статье MSDN, рекурсивно с глубинным подходом: http://msdn.microsoft.com/en-us/library/07wt70x2.aspx

    // Process all files in the directory passed in, recurse on any directories  
    // that are found, and process the files they contain. 
    public static void ProcessDirectory(string targetDirectory) 
    {
        // Process the list of files found in the directory. 
        string [] fileEntries = Directory.GetFiles(targetDirectory);
        foreach(string fileName in fileEntries)
            ProcessFile(fileName);

        // Recurse into subdirectories of this directory. 
        string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach(string subdirectory in subdirectoryEntries)
            ProcessDirectory(subdirectory);
    }

    // Insert logic for processing found files here. 
    public static void ProcessFile(string path) 
    {
        Console.WriteLine("Processed file '{0}'.", path);       
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...