C#treeview未经授权的异常

C#treeview未经授权的异常,c#,exception-handling,file-permissions,getdirectories,C#,Exception Handling,File Permissions,Getdirectories,所以我就跟着这篇文章 这是使用设计器创建具有ListView和TreeView控件的资源管理器样式的界面 所以一切都很好,但是,服务器,是你设置它为C的根扫描所有的文件夹和文件等。我收到{“访问路径”你可能有错误的地方尝试捕捉。根据演练中的代码,你可以把尝试捕捉如下: 替换: subSubDirs = subDir.GetDirectories(); 为此: try { subSubDirs = subDir.GetDirectories(); } catch(Unauthorize

所以我就跟着这篇文章

这是使用设计器创建具有ListView和TreeView控件的资源管理器样式的界面


所以一切都很好,但是,服务器,是你设置它为C的根扫描所有的文件夹和文件等。我收到
{“访问路径”你可能有错误的地方尝试捕捉。根据演练中的代码,你可以把尝试捕捉如下:

替换:

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)

您可能将try-catch放在了错误的位置。根据演练中的代码,您可以将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)

您会遇到异常,因为呼叫帐户没有对
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.");
DirectoryInfo root=newdirectoryinfo(@“C:\”);
Func谓词=dir=>
(dir.Attributes&FileAttributes.System)!=FileAttributes.System&&
(dir.Attributes&FileAttributes.Hidden)!=FileAttributes.Hidden;
IEnumerable directories=root.GetDirectories().Where(谓词);
foreach(目录中的DirectoryInfo目录){
试一试{
Trace.WriteLine(directory.Name);
DirectoryInfo[]子目录=directory.GetDirectories();
}
捕获(System.UnauthorizedAccessException){
Trace.WriteLine(“访问权限不足”);
}
}
Trace.WriteLine(“应用程序结束”);

不过,这并不是每种情况下的解决方案,在某些文件和文件夹上都会失败。使用现有的API没有简单的解决方案;您可能希望改为通过WMI获取文件和目录信息。

您会遇到异常,因为调用帐户没有对卷中的
系统等文件夹的访问权限您可以通过使用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.");
DirectoryInfo root=newdirectoryinfo(@“C:\”);
Func谓词=dir=>
(dir.Attributes&FileAttributes.System)!=FileAttributes.System&&
(dir.Attributes&FileAttributes.Hidden)!=FileAttributes.Hidden;
IEnumerable directories=root.GetDirectories().Where(谓词);
foreach(目录中的DirectoryInfo目录){
试一试{
Trace.WriteLine(directory.Name);
DirectoryInfo[]子目录=directory.GetDirectories();
}
捕获(System.UnauthorizedAccessException){
Trace.WriteLine(“访问权限不足”);
}
}
Trace.WriteLine(“应用程序结束”);

不过,这并不是每种情况下的解决方案,在某些文件和文件夹上都会失败。使用现有API没有简单的解决方案;您可能希望通过WMI获取文件和目录信息。

请发布您的代码,包括您将
try
捕获到的位置。听起来像是权限问题sue对我说。最有可能的做法是尝试访问C的根:(我认为较新版本的Windows对此有一些保护)。正如ChrisF所说,发布您的代码将有助于获得更好的答案。请发布您的代码,包括您将
try
catch
放在哪里。对我来说,听起来像是权限问题。最有可能的做法是尝试访问C的根:(我认为较新版本的Windows对此有一些保护).正如克里斯夫所说,发布代码将有助于获得更好的答案。