【问题标题】:UnauthorizedAccessException while scanning directory 'User\Documents\My Music'扫描目录“User\Documents\My Music”时出现 UnauthorizedAccessException
【发布时间】:2012-05-15 16:01:24
【问题描述】:
  1. 问题:为什么我在扫描用户的“我的文档”文件夹时会收到此错误,而在扫描“我的音乐/我的图片/我的视频”目录时却没有?
  2. 次要, 不太重要的问题:有没有办法避免这种情况,而不必专门过滤掉这些文件夹,或者使用 try/catch 块?

我更喜欢教我如何钓鱼的答案,而不是仅仅给我鱼。就在这一点上,我不确定我需要在哪里专门回答这个问题。 我已经阅读了有关 elevating permissionsiterating through the file system 的文档,并花了一周的时间寻找为什么我可以设置 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
  • 用户权限:管理员
  • 应用升级为以管理员身份运行

【问题讨论】:

    标签: c#-4.0 directory


    【解决方案1】:

    我正在和一个朋友谈论这个问题,他不是技术人员,但知道足够的技术来进行对话,他帮助我进一步缩小了这个问题的范围。这实际上是一个重复的问题,并在Check if a file is real or a symbolic link 得到了回答。

    该文件夹是一个符号链接,根据 TechRepublic: Answers to some common questions about symbolic links 部分 Windows Vista 和Windows 7 有内置符号链接 第 2 段。

    为了特别避免在 UnauthorizedAccessException 上没有 Try/Catch 块的情况下尝试扫描此目录,需要检查文件夹属性以确定相关文件夹或文件是否为符号链接。上面列出的stackoverflow问题再次回答了这个问题。

    【讨论】:

      猜你喜欢
      • 2013-04-23
      • 2021-06-20
      • 2018-05-18
      • 2011-06-28
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2016-12-09
      相关资源
      最近更新 更多