VB.NET新手求助:如何用Directory.GetFiles获取C盘全部文件
解决VB.NET中Directory.GetFiles获取C盘所有文件的问题
嘿,作为VB.NET新手碰到这个问题太正常了!我来一步步帮你搞定它,先从你可能踩的坑说起:
1. 你可能不小心加了文件筛选器
如果你的代码是类似这样的:
Dim exeFiles = Directory.GetFiles("C:\", "*.exe")
那当然只会找到.exe格式的文件啦!要获取所有文件,你需要用不带筛选器的重载,或者用通配符*匹配所有文件:
' 两种写法都能获取当前目录下的所有文件 Dim allFilesInRoot = Directory.GetFiles("C:\") Dim allFilesInRoot2 = Directory.GetFiles("C:\", "*")
2. 默认只获取当前目录,不包含子目录
上面的代码只能拿到C盘根目录的文件,要遍历所有子目录里的文件,得加上SearchOption.AllDirectories参数:
Dim allFiles = Directory.GetFiles("C:\", "*", SearchOption.AllDirectories)
但这里会碰到一个大问题:权限不足!
3. 处理C盘的权限限制
C盘里的Windows、Program Files、System Volume Information等目录需要管理员权限才能访问,直接运行代码会抛出UnauthorizedAccessException异常,导致整个遍历中断。
解决这个问题的最佳方式是自己写递归遍历方法,捕获异常并跳过无法访问的目录,这样就能尽可能收集所有能访问的文件:
Imports System.IO Module FileScanner Sub Main() Dim allAccessibleFiles As New List(Of String)() ScanAllFiles("C:\", allAccessibleFiles) Console.WriteLine($"成功找到 {allAccessibleFiles.Count} 个可访问文件") ' 遍历输出文件路径(可选) For Each filePath In allAccessibleFiles Console.WriteLine(filePath) Next End Sub Private Sub ScanAllFiles(ByVal targetPath As String, ByVal filesList As List(Of String)) Try ' 先收集当前目录的所有文件 For Each file In Directory.GetFiles(targetPath) filesList.Add(file) Next ' 递归遍历所有子目录 For Each subDir In Directory.GetDirectories(targetPath) ScanAllFiles(subDir, filesList) Next Catch ex As UnauthorizedAccessException ' 跳过无权限的目录,打印提示 Console.WriteLine($"跳过无权限目录: {targetPath}") Catch ex As DirectoryNotFoundException ' 跳过已删除或不存在的目录 Console.WriteLine($"目录不存在,已跳过: {targetPath}") End Try End Sub End Module
几个重要提示
- 右键以管理员身份运行你的VB.NET程序,能减少很多权限问题(但仍有部分系统目录无法访问)
- C盘文件数量极大,第一次遍历可能需要几分钟,测试时可以先换成小目录(比如
C:\Users\你的用户名\Desktop) - 别忘了在代码顶部引用
System.IO命名空间,否则Directory类会报错
内容的提问来源于stack exchange,提问作者user9641135
相关产品推荐
相关产品推荐

