所以我跟着MS文章http://msdn.microsoft.com/en-us/library/ms171645.aspx
这是使用Designer使用ListView和TreeView控件创建资源管理器样式界面。
所以一切顺利,你是否将它设置为C的根目录以扫描所有文件夹和文件等。我收到{"Access to the path '<path to file' is denied."}
VS 2010指出了这个问题。
subSubDirs = subDir.GetDirectories();
我可以尝试一下这个,但是,在抛出异常后应用程序不会继续。
有没有办法可以跳过应用无法访问的目录?
答案 0 :(得分:0)
你可能在错误的地方尝试捕获。根据演练中的代码,您可以将try catch设置为:
替换:
subSubDirs = subDir.GetDirectories();
用这个:
try
{
subSubDirs = subDir.GetDirectories();
}
catch(UnauthorizedAccessException uae)
{
//log that subDir.GetDirectories was not possible
}
另外,该行:
if (subSubDirs.Length != 0)
应更改为:
if (subSubDirs != null && subSubDirs.Length != 0)
答案 1 :(得分:0)
您收到例外,因为主叫帐户没有System Volume Information
等文件夹的访问权限。您可以使用Linq并跳过标记为System
或Hidden
的文件夹来解决此部分。
DirectoryInfo root = new DirectoryInfo(@"C:\");
Func<FileSystemInfo, Boolean> predicate = dir =>
(dir.Attributes & FileAttributes.System) != FileAttributes.System &&
(dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden;
IEnumerable<FileSystemInfo> directories = root.GetDirectories().Where(predicate);
foreach (DirectoryInfo directory in directories) {
try {
Trace.WriteLine(directory.Name);
DirectoryInfo[] subdirectories = directory.GetDirectories();
}
catch (System.UnauthorizedAccessException) {
Trace.WriteLine("Insufficient access rights.");
}
}
Trace.WriteLine("End of application.");
但这并不适用于所有方案,并且将在某些文件和文件夹上失败。使用现有的API没有简单的解决方案;您可能希望通过WMI来查看获取文件和目录信息。