vb.net-需要帮助快速枚举整个c驱动器上的文件吗
我知道我的C驱动器上有350808个文件,我可以使用getfile和getdirectory函数访问这些文件,但是那样的话,递归整个驱动器大约需要3个小时。我读到使用枚举函数要快得多,但它似乎只减少了大约1300个文件,然后就退出了。 这是我的密码:vb.net-需要帮助快速枚举整个c驱动器上的文件吗,vb.net,directory,enumerate,getfiles,Vb.net,Directory,Enumerate,Getfiles,我知道我的C驱动器上有350808个文件,我可以使用getfile和getdirectory函数访问这些文件,但是那样的话,递归整个驱动器大约需要3个小时。我读到使用枚举函数要快得多,但它似乎只减少了大约1300个文件,然后就退出了。 这是我的密码: Dim sw As New StreamWriter(ProjDir & "TestFour.txt", False) Try Dim dirPrograms As New DirectoryInfo(Fir
Dim sw As New StreamWriter(ProjDir & "TestFour.txt", False)
Try
Dim dirPrograms As New DirectoryInfo(FirstDir)
Dim dirs = From dir In dirPrograms.EnumerateDirectories()
For Each d As DirectoryInfo In dirs
sw.WriteLine("{0}", d.FullName)
Dim DirInfo As New DirectoryInfo(d.FullName)
Dim files = From f In DirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
For Each f In files
sw.WriteLine(f.FullName)
fPath = f.DirectoryName
fName = f.Name
fSize = f.Length
fCre = f.CreationTime
fMod = f.LastAccessTime
sw.WriteLine("{0}*{1}*{2}*{3}*{4}", fPath, fName, fSize, fCre, fMod)
Next
Next
Catch
End Try
Process.Start(ProjDir & "testFour.txt")
sw.Close()
sw.Dispose()
为什么它会停在1300个文件上?如何修复代码以递归整个C驱动器,而不仅仅是前十个目录?编写自己的递归方法来枚举文件,并在任务中运行此方法
Imports System.IO
Module Module1
Sub Main()
Dim searcher As New Task(Of IList(Of String))(Function()
Return GetFiles("C:\", "*.txt")
End Function)
searcher.Start()
Console.WriteLine("Searching for .txt files in C:\ and all subdirectories...")
searcher.Wait()
Dim files = searcher.Result
Console.WriteLine(String.Format("{0:N0} .txt files found.", files.Count))
Console.ReadKey()
End Sub
Function GetFiles(directoryPath As String, filter As String) As IList(Of String)
Dim files As New List(Of String)
Dim directories() As String = Nothing
Try
files.AddRange(Directory.GetFiles(directoryPath, filter))
directories = Directory.GetDirectories(directoryPath)
Catch ex As Exception
Console.WriteLine($"Error while processing folder {directoryPath}.")
End Try
If directories IsNot Nothing Then
For Each directory In directories
files.AddRange(GetFiles(directory, filter))
Next
End If
Return files
End Function
End Module
不要使用
所有目录
,而是手动浏览目录树。然后,您可以在中为每个
捕获可能的IO例外。如果不写入流,速度有多快?如果搜索所有文件,枚举函数不会快很多。它们的主要优点是可以在搜索完整目录之前退出,但是如果你想通读到最后,那就没有什么大的优势了。我希望它们对内存管理的影响较小,因此您可能会看到性能略有提高,但显然磁盘访问是造成这种情况的罪魁祸首,而不是内存使用。如果您想知道代码为什么不处理所有文件,请去掉Try/Catch(或者在Catch块中做一些有用的事情)。很可能是权限问题。