仅获取名称不以特定字符串开头的目录中的那些文件

时间:2015-08-29 14:07:01

标签: vb.net linq directoryinfo

我目前有这段代码:

    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?

干杯,

克里斯。

2 个答案:

答案 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