UnauthorizedAccessException同时扫描目录“用户\\ \\的文档我的音乐”(

2019-09-17 01:50发布

  1. 问:为什么我得到这个错误,而扫描用户的“我的文档”文件夹,而不是当我扫描“我的音乐/我的图片/我的视频”目录?
  2. 次要的, 不太重要的问题 :是否有办法避免这种情况,而不必对这些文件夹专门过滤掉,或使用try / catch块?

我更喜欢教我如何钓鱼的答案,而不是只给我的鱼。 恰在此时,我不知道,我需要看具体回答这个问题。 我已经通过关于文档阅读提升权限 ,并通过文件系统迭代 ,并花了美好的一周寻找为什么我可以在设定的DirectoryInfo“用户\我的音乐”,但不是“用户\ Documents \我的音乐”(链接),只是将享受关于在不同的方向一点点推动学习更多。

我赶上了最初的“UnauthorizedAccessException”最初被抛出试图Directory.GetFiles时(“路径”,“*”,SearchOption.AllDirectories),其中路径是用户的“我的文档”。 为了处理我知道我需要手动行走目录例外。 其中一期工程,从子目录返回文件。

用于初始的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。

我完全理解,我要解决这个编码。 主要是什么我很好奇地想知道,是为什么是异常的用户文件夹下发生?

我想提出一个asssumption是该文件夹是一个符号链接到其他目录,因为我可以做的路径:\ \我的(音乐,图片或视频),代码走的目录,那么没有任何问题的用户目录\用户 。 这只是想从用户的我的文档中设置它们后,扫描目录中的文件时发生。

  • 操作系统:Windows 7
  • 用户Privliages:管理员
  • 应用提升到管理员身份运行

Answer 1:

我说到这个的朋友,谁不是技术问题,但知道的足够多的高科技举行对话,他帮我下进一步缩小了这个问题。 这其实是一个重复的问题,在得到的回答检查文件是否真实或符号链接 。

该文件夹是根据这篇文章的TechRepublic的放在这里是为了向后兼容性目的的符号链接: 回答有关符号链接的一些常见问题下的部分Windows Vista和Windows 7具有内置的符号链接第2款。

为了明确避免试图没有try / catch块这个目录扫描上UnauthorizedAccessException文件夹属性需要进行检查,以确定是否有问题的文件夹或文件是一个符号链接。 而这又是在回答上面列出的计算器问题。



文章来源: UnauthorizedAccessException while scanning directory 'User\\Documents\\My Music'