用多个通配符搜索vb.net目录文件

时间:2014-07-30 16:00:31

标签: vb.net wildcard subdirectory

我要做的是搜索文件夹的子目录和任何具有/ Year / Month /我想从该文件夹中提取文件的文件夹。

文件夹路径通常如下

BaseFilePath \组别1 \ SubGroup1 \年份\月 BaseFilePath \组别1 \年份\月

目标是将这些文件移动到另一个文件夹中,虽然我已经尝试遍历整个目录,但它似乎花了太长时间,我想知道是否有更快或更简单的解决方案。

我用来执行此操作的代码如下

    Dim topLevelFolder As New DirectoryInfo("\\BaseFilePath\")

    Using outputFile As New StreamWriter("C:\output_file.txt")
        For Each currentFile In topLevelFolder.EnumerateFiles("*.*", SearchOption.AllDirectories)
            Try
                If currentFile.Directory.Name = "June" AndAlso currentFile.Directory.Parent.Name = "2014" AndAlso Left(currentFile.Name, 5) <> "SENT_" Then
                    outputFile.WriteLine(currentFile.Directory.Parent.Parent.Name & "/" & currentFile.Directory.Parent.Name & "/" & currentFile.Directory.Name & "/" & currentFile.Name)
                End If
            Catch
            End Try

        Next
    End Using

这个部分已经花了将近30秒,我想将文件移动到另一个文件夹也需要一些时间,但如果我能加快文件的查找速度,那么整个过程会变得更顺畅

我看到你可以在searchPattern中使用通配符,但是当我尝试在路径中获得非法字符时,或者第二个路径片段不能是驱动器或UNC名称。我知道单个通配符是可用的,即(BaseFilePath \ partialFolderName *)但当它扩展到多个通配符目录时似乎没有帮助。

理想情况下,我要做的是搜索BaseFilePath * 2014 \ June *并仅从这些文件夹中提取文件。

非常感谢任何帮助或建议

1 个答案:

答案 0 :(得分:1)

您可以这样做:

topLevelFolder.EnumerateDirectories("*2014", SearchOption.AllDirectories)

然后在那些中过滤June个。然后枚举每个结果条目中的文件。

不幸的是,.NET不支持完整路径的目录通配符搜索,因此这不起作用*2014\June*,它会抱怨无效字符。

相关问题