- 问题:为什么我在扫描用户的“我的文档”文件夹时收到此错误,但在扫描“我的音乐/我的图片/我的视频”目录时却没有?
- 次要的, 不太重要的问题:有没有办法避免这种情况,而不必专门过滤掉这些文件夹,或者使用 try/catch 块?
我更喜欢教我如何钓鱼的答案,而不仅仅是给我鱼。就在这一点上,我不确定我需要在哪里专门回答这个问题。 我已经阅读了有关提升权限和遍历文件系统的文档,并花了一周的时间寻找为什么我可以在“用户\我的音乐”而不是“用户\文档\我的音乐”(链接)上设置 DirectoryInfo,而只是在学习更多方面会在不同的方向上获得一点推动。
我捕获了在尝试 Directory.GetFiles('path', "*", SearchOption.AllDirectories) 时最初抛出的初始'UnauthorizedAccessException',其中路径是用户'我的文档'。要处理异常,我知道我需要手动遍历目录。哪个有效,从子目录返回文件。
初始 GetFiles 函数的代码:
public static string[] GetFiles(string path)
{
string[] files;
try
{
files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
}
catch(UnauthorizedAccessException ex)
{ files = WalkDirectory(path); }
return files;
}
public static string[] WalkDirectory(string path)
{
List<string> files = new List<string>();
DirectoryInfo dir = new DirectoryInfo(path);
foreach (DirectoryInfo subDir in dir.GetDirectories())
{
try
{
files.AddRange(WalkDirectory(subDir.FullName));
}
catch(UnauthorizedAccessException ex)
{
// complete fail to walk directory listed
throw ex;
}
}
foreach (FileInfo file in dir.GetFiles())
{
files.Add(file.FullName);
}
}
这非常有效,直到代码尝试遍历隐藏文件夹:我的音乐、我的图片或我的视频。无论我如何尝试重新编码以遍历隐藏文件,我都会不断收到 UnauthorizedAccessException。
我完全理解我将围绕这个编写代码。主要是我很想知道,为什么用户文件夹下会发生异常?
我假设该文件夹是指向另一个目录的符号链接,因为我可以创建路径?:\users directory\user\My (Music, Pictures, or Videos)并且代码遍历这些目录然后没有任何问题。这仅在从用户我的文档中设置目录文件后尝试扫描目录文件时发生。
- 操作系统: Windows 7
- 用户权限:管理员
- 应用程序提升为以管理员身份运行