我要做的是搜索文件夹的子目录和任何具有/ 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 *并仅从这些文件夹中提取文件。
非常感谢任何帮助或建议
答案 0 :(得分:1)
您可以这样做:
topLevelFolder.EnumerateDirectories("*2014", SearchOption.AllDirectories)
然后在那些中过滤June
个。然后枚举每个结果条目中的文件。
不幸的是,.NET不支持完整路径的目录通配符搜索,因此这不起作用*2014\June*
,它会抱怨无效字符。