Выбор имен файлов, начинающихся с «NVH», а не «NVHE» в C #

1

Я хочу выбрать имена файлов, начиная с префикса NVH, только из каталога. Не следует выбирать имена файлов, начинающиеся с NVHE из того же каталога. Как я могу это сделать?

Я пробовал некоторые вещи. Они следующие. Они

//This will store all file names beginning with NVH prefix and NVHE prefix in array
string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")
                                 .Select(path => Path.GetFileName(path))
                                 .ToArray();

//This will store all file names beginning with NVHE prefix in array only
string[] files12 = Directory.GetFiles(moduleDir, "NVHE*.*")
                          .Select(path => Path.GetFileName(path))
                                 .ToArray();

Теперь я хочу, чтобы имена файлов начинались только с NVH, а не NVHE. Как я могу это сделать?

Теги:

4 ответа

3
Лучший ответ

Directory.GetFiles не поддерживает регулярные выражения:

Строка поиска соответствует именам файлов в пути. Этот параметр может содержать комбинацию действительных символов литерала и шаблона (* и?) (См. Примечания), но не поддерживает регулярные выражения.

В качестве альтернативы вы можете использовать Directory.EnumerateFiles:

Directory.EnumerateFiles(moduleDir)
         .Select(Path.GetFileName)
         .Where(file=>file.StartsWith("NVH") && !file.StartsWith("NVHE"));

Если вы хотите сохранить полный путь к файлам:

Directory.EnumerateFiles(moduleDir)
         .Where(path=>
            {
               var file = Path.GetFileName(path);
               return file.StartsWith("NVH") && !file.StartsWith("NVHE")
            });

Вы также можете использовать свой существующий код и фильтровать первую коллекцию таким образом:

var result = files11.Except(files12)
1

Хорошо, поскольку вы используете LINQ уже, почему бы не добавить в " Where фильтровать"...

string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")//get all files starting with NVH
                             .Select(path => Path.GetFileName(path))//convert the full paths to filenames only (inc. extensions)
                             .Where(path => !path.StartsWith("NVHE"))//filter out files that start with NVHE
                             .ToArray();

Важно отметить, что предложение Where должно идти после преобразования пути (например, Select), в противном случае оно будет пытаться соответствовать началу полного пути к файлу (например, "C:\...")

1

А ТАКЖЕ

 files11 = files11.Except(files12).ToArray();
1

Вы можете добавить:

.Where(path => !path.StartsWith("NVHE"))


string[] files11 = Directory.GetFiles(moduleDir, "NVH*.*")
                             .Select(path => Path.GetFileName(path))
                             .Where(path => !path.StartsWith("NVHE"))
                             .ToArray();
  • 1
    Я бы использовал ... path.StartsWith ("NVHE", StringComparison.OrdinalIgnoreCase), поскольку в Windows файлы не чувствительны к регистру.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню