1

很奇怪,我在调用 GetDirectories() 方法时偶尔会遇到错误。

当我们的 IT 部门将一些文件夹远程移动到我的本地计算机时,这种情况就开始发生了。此错误仅在使用 C# 浏览这些文件夹时发生。

错误消息:'访问路径 'C:\Users\XXXX\XXXXXX 被拒绝'

代码:

public static string[] GetDirectoryInfo(string path)
{
    if (Directory.Exists(path))
    {
        //This call is failing on the new folder.
        return Directory.GetDirectories(path);
    }
    return new string[0];
}

不是很复杂,对吧?

使用 Windows 资源管理器导航,该文件夹不存在。

在 CMD 提示符下,我可以将目录更改为该文件夹;跟进 DIR 命令,我收到错误“找不到文件”。

我猜这个问题是一个 Win32 问题,并且在移动文件夹时没有清理一些东西。我不知道如何解决这个问题,除了挖掘反编译的 System.IO 类;如果我没有得到解决方案,我会这样做。

4

2 回答 2

2

您的代码可能正在尝试访问您的帐户/角色无法访问的隐藏文件夹。

最简单的解决方案是抓住UnauthorizedAccessException并吃掉它,所以它基本上会跳过目录,如下所示:

public static string[] GetDirectoryInfo(string path)
{
    if (Directory.Exists(path))
    {
        try 
        { 
            //This call is failing on the new folder.
            return Directory.GetDirectories(path);
        }
        catch(UnauthorizedAccessException unAuthEx)
        {
            // Do nothing to eat exception
        }
    }
    return new string[0];
}
于 2013-09-28T04:34:50.503 回答
0

当软件出于安全原因尝试访问受 Windows 限制的文件夹时会发生这种情况,例如:

C:\Users\Default  (This path is not accessible by your code)

另一个原因是您的应用程序正在尝试访问不是真正文件夹的文件夹

My Music
My Pictures

如果您尝试读取特定驱动器中的所有文件夹,那么您可以创建一些例外来处理这些目录,另一件可能帮助您的事情是以管理员身份运行您的应用程序。

于 2013-09-28T04:34:20.323 回答