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

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

Я пытался

var files = Directory.GetFiles(jobDir);

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

Ответы [ 10 ]

83 голосов
/ 16 апреля 2009

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

    var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml"));
13 голосов
/ 16 апреля 2009

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

  var allFiles = Directory.GetFiles(@"C:\Path\", "");
  var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt");
  var wantedFiles = allFiles.Except(filesToExclude);
12 голосов
/ 05 декабря 2014

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

если вы хотите исключить список расширений файлов: (на основе https://stackoverflow.com/a/19961761/1970301)

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)));
}
10 голосов
/ 16 апреля 2009

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

var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext"))
3 голосов
/ 16 июня 2016

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

var directoryInfo = new DirectoryInfo("C:\YourPath");
var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb");
0 голосов
/ 29 апреля 2018

я использовал это

Directory.GetFiles(PATH, "*.dll"))

и ПУТЬ:

открытая статическая строка _PATH = Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location);

0 голосов
/ 23 ноября 2016

Я наткнулся на это в поисках метода, который бы делал это, чтобы исключение могло использовать правила шаблона поиска, а не только логику типа 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"));
0 голосов
/ 09 ноября 2014

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

List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>();
0 голосов
/ 27 сентября 2012
string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der");

foreach (string fileName in filesToDelete)
{
    File.Delete(fileName);
}
0 голосов
/ 16 апреля 2009

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

string[] files = Directory.GetFiles(myDir);
foreach(string fileName in files)
{
    DoSomething(fileName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...