2015-08-29 4 views
1

настоящего времени у меня этот код:Получить только те файлы в каталоге, имя которого не начинается с определенной строкой

Dim FolderInfo As IO.DirectoryInfo = New IO.DirectoryInfo("C:\Scratch") 

    For Each FInfo As IO.FileInfo In FolderInfo.GetFiles("*.xlsx") 

     MessageBox.Show(FInfo.ToString()) 
    Next FInfo 

Очевидно, что это будет получить все файлы, которые соответствуют шаблону «* .xlsx» - но Я НЕ заинтересован в каких-либо файлах, которые начинаются со «старого», поэтому, конечно, в «Далее» я мог бы сделать что-то вроде if If FFI.Name.StartsWith («old») Then ... и делать то, что мне нужно do, но мне было интересно, есть ли способ сообщить GetFiles только получить файлы, которые «не начинаются со« старого »и заканчиваются на * .xlsx»?

Я видел примеры на C#, которые, я считаю, используют LINQ, поэтому после GetFiles есть такие вещи, как «.Where (f =>! (F.FullName.StartsWith (« old »)))», но не уверен что (если есть), то эквиливант будет для VB.NET?

Cheers,

Chris.

+0

'.Where (Функция (w) w.FullName.StartsWith (" old ") = False)' – Plutonix

ответ

1

Синтаксис немного более многословным, но где работает, а в VB

For Each FInfo As IO.FileInfo In FolderInfo.GetFiles("*.xlsx"). 
    Where(Function(x) Not x.Name.StartsWith("old")) 

    MessageBox.Show(FInfo.ToString()) 
Next FInfo 

Я хотел бы также добавить StringComparison.CurrentCultureIgnoreCase удалить также файлы, которые начинаются с «старым» или «старым» и так далее

For Each FInfo As IO.FileInfo In FolderInfo.GetFiles("*.xlsx"). 
    Where(Function(x) Not x.Name.StartsWith("old", StringComparisong.CurrentCultureIgnoreCase)) 

    MessageBox.Show(FInfo.ToString()) 
Next FInfo 

Кстати, вы должны использовать свойство Name вместо FullName. FullName возвращает также путь к файлу и, очевидно, этот путь не начинается со «старого».

+0

Cheers guys! Я заметил предложение Стива в качестве ответа, поскольку я надеялся использовать GetFiles, но оба могли бы сделать трюк. –

+0

Нет, к сожалению, нет способа изменить метод GetFiles класса DirectoryInfo. Вы можете создать метод расширения, но это всего лишь способ скрыть работу кода, как показано выше. Внутри метода расширения у вас есть тот же код – Steve

0
Dim folder As String = "C:\Scratch" 
Dim files = Directory.EnumerateFiles(folder, "*.xlsx", SearchOption.TopDirectoryOnly) _ 
    .Where(Function(f) Not Path.GetFileName(f).ToLowerInvariant().StartsWith("old"))  

    For Each file As string In files 
     MessageBox.Show(file) 
    Next file 

 Смежные вопросы

  • Нет связанных вопросов^_^