Исключать определенные расширения файлов при получении файлов из каталога

Как исключить определенный тип файла при получении файлов из каталога?

Я пробовал

var files = Directory.GetFiles(jobDir);

Но, похоже, эта функция может выбирать только типы файлов, которые вы хотите включить, а не исключать.

Ответ 1

Вы должны сами фильтровать эти файлы, вы можете написать что-то вроде этого:

    var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml"));

Ответ 2

Вы можете попробовать что-то вроде этого:

  var allFiles = Directory.GetFiles(@"C:\Path\", "");
  var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt");
  var wantedFiles = allFiles.Except(filesToExclude);

Ответ 3

Я думаю, вы можете использовать лямбда-выражение

var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext"))

Ответ 4

Я знаю, это старый запрос, но обо мне это всегда важно.

если вы хотите исключить список расширений файла: (на основе fooobar.com/questions/25514/...)

var exts = new[] { ".mp3", ".jpg" };



public IEnumerable<string> FilterFiles(string path, params string[] exts) {
    return
        Directory
        .GetFiles(path, SearchOption.AllDirectories)
        .Where(file => !exts.Any(x => file.Extension.EndsWith(x, StringComparison.OrdinalIgnoreCase)));
}

Ответ 5

Вы можете попробовать это,

var directoryInfo = new DirectoryInfo("C:\YourPath");
var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb");

Ответ 6

Afaik нет способа указать шаблоны исключений. Вы должны сделать это вручную, например:

string[] files = Directory.GetFiles(myDir);
foreach(string fileName in files)
{
    DoSomething(fileName);
}

Ответ 7

Это моя версия ответов, которые я читал выше

List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>();

Ответ 8

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

например. Спецификатор шаблона шаблона поиска соответствует:

  • * (звездочка) Ноль или более символов в этой позиции.
  • ? (знак вопроса) Нулевой или один символ в этом положении.

Это можно было бы использовать для вышеизложенного следующим образом.

string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.*").Except(Directory.GetFiles(dir, "*.xml"));

Или для исключения элементов, которые в противном случае были бы включены.

string dir = @"C:\Temp";
var items = Directory.GetFiles(dir, "*.txt").Except(Directory.GetFiles(dir, "*HOLD*.txt"));

Ответ 9

string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der");

foreach (string fileName in filesToDelete)
{
    File.Delete(fileName);
}