2015-01-08 5 views
-1

Я пытаюсь отделить файлы в папке по расширению, используя код ниже:Как фильтровать расширения файлов

Dim file_list3 As String() = Directory.GetFiles(path, "*.xls") 
Dim file_list4 As String() = Directory.GetFiles(path, "*.xlsm") 

, но все файлы «.xls» в конечном итоге в списке 4 вместе с Файлы .xlsm. Как я могу сохранить подмножество только «.xls», вылетающих из списка файлов «.xlsm»?

Спасибо.

+1

не удается воспроизвести, вы уверены, что нет другого кода, что вещи «миксы»? – Steve

+0

Нет, нет другого кода, который бы смешивал вещи. Почему голосует, просто потому, что вы не можете воспроизвести его? – user2721815

+0

см. Примечания: http://msdn.microsoft.com/en-us/library/vstudio/wz42302f(v=vs.100).aspx – Plutonix

ответ

0

Я нашел ответ:

Спасибо.

+2

, если вы собираетесь это сделать - вам нужен только один вызов GetFiles; затем создайте подсписки из этого главного списка – Plutonix

+0

Но я хочу отдельный список каждого типа файла, чтобы это были мои подсписки. – user2721815

+0

Но вы можете сделать один звонок в Файловую систему, а затем разделить результаты, используя Where, в 2 отдельных списках. – Jonas

0

Наконец-то мне удалось воспроизвести описанное поведение.
кажется, что я поставил эту команду на моем рабочем компьютере

fsutil 8dot3name set 0 

Эта команда запрещает создание старых 8.3 коротких имен файлов, необходимых в MS-DOS времени.
С этой конфигурацией команда Directory.GetFiles(path, "*.xls") возвращает только файлы, имеющие точно указанное расширение, а не другие расширения, которые начинаются с XLS.

Применение команды

fsutil 8dot3name set 1 

я ожидал иметь тот же результат объясняется ОП, но это не так с файлами уже в папке, потому что они были созданы, когда был отключен 8dot3name флаг.
Но новый файл с именем test.xlsm начал появляться между файлами, возвращаемого шаблоном поиска *.xls

Таким образом, чтобы решить вашу проблему, вы можете использовать команду fsutil, как описаны в статье How to disable 8.3 file name creation on NTFS partitions и, возможно, стирают старые 8.3 записи с опцией strip или просто использовать небольшое изменение вашего кода выше

Dim all_files = Directory.EnumerateFiles(path, "*.xls") 
Dim file_list3 = all_files.Where(Function(x) Path.GetExtension(x).ToLower = ".xls").ToList() 
Dim file_list4 = all_files.Where(Function(x) Path.GetExtension(x).ToLower = ".xlsm").ToList()