2015-07-08 4 views
1

Как исключить определенные имена каталогов при их получении из каталога? я в настоящее время:Исключить определенные имена каталогов

Dim dir1 As DirectoryInfo() = dir2.GetDirectories() 

Я попытался вариацию на примере ниже:

Dim dir1 As DirectoryInfo() = dir2.GetDirectories().Where(Name = Name.Contains("00000000.001")) 

Попытка исключить два файла имена из процесса я собираюсь быть запущен на остальной части файлы. Любые предложения были бы замечательными. Благодаря!

EDIT: Испытано Ответ предоставляется Tim с помощью этого кода:

Dim direct1 As DirectoryInfo 
For Each direct1 In dir1 
     ListBox2.Items.Add(direct1.Name) 
Next 

Он отображается два имени файла, что я в настоящее время пытаюсь избежать.

+0

Так что вы хотите взять или исключить все имена, которые не имеют 00000000.001 в их именах? –

+0

Я хочу исключить все каталоги с 00000000.001 & 00000000.002 в их именах – Pez

+0

Я отредактировал свой ответ ниже, чтобы включить оба случая. –

ответ

1

Вы можете использовать LINQ, поэтому я бы предпочел DirectoryInfo.EnumerateDirectories.

Из MSDN:

В EnumerateDirectories и GetDirectories методы различаются по следующим образом: При использовании EnumerateDirectories, вы можете начать перечисляя коллекцию DirectoryInfo объектов перед всем коллекция возвращается. Когда вы используете GetDirectories, вы должны подождать для всего массива DirectoryInfo объектов, которые должны быть возвращены до , вы можете получить доступ к массиву.

Например:

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories(). 
    Where(Function(dir) dir.Name.Contains("00000000.001")). 
    ToArray() 

Если вместо этого вы хотите Exlude их использовать Not ...:

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories(). 
    Where(Function(dir) Not dir.Name.Contains("00000000.001")). 
    ToArray() 

Если вы хотите Exlude многократного использования:

Dim exclude = { "00000000.001", "00000000.002" } 

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories(). 
    Where(Function(dir) Not exclude.Any(Function(d) dir.Name.Contains(d))). 
    ToArray() 
+0

Это, похоже, не сработало, я отредактировал свое оригинальное сообщение, чтобы показать код, который я запускал, и он по-прежнему отображает файловые каталоги, которые предположительно были исключены. – Pez

+0

@ Pezzy007: но отредактированный вами код не использует мой подход LINQ. Вы просто перечисляете все каталоги в «Для каждого». Замените 'Для каждого direct1 In dir1' на' Для каждого direct1 In dirs', в то время как 'dirs' - это то, что я опубликовал выше как второй подход. –

+0

Я использовал ваш код, но сменил dir на dir1 – Pez