我目前有这段代码:
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" - 但我对以" old"开头的任何文件都不感兴趣 - 所以当然在For Next中,我可以做一些像if If FInfo.Name.StartsWith(" old")然后......并做我需要做的事,但我想知道是否有是任何方式告诉GetFiles只能获得"不要以#34; old"并以* .xlsx"结尾?
我在C#中看到了我认为使用LINQ的例子 - 所以在GetFiles之后会出现类似" .Where(f =>!(f.FullName.StartsWith)(" old& #34;)))"但不确定什么(如果有的话)等效于VB.NET?
干杯,
克里斯。
答案 0 :(得分: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
来删除以" Old"开头的文件。或者" OLD"等等
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也返回文件的路径,显然,这条路径并不以" old"开头。
答案 1 :(得分: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