为什么我的Documents and Settings文件夹出现拒绝访问错误?

时间:2011-12-16 04:33:07

标签: c# .net windows-7 file-io directory

我正在编写一个获取所有目录和子目录的程序。我正在使用以下代码:

DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives)
{
    string[] directories = Directory.GetDirectories(drive.Name, "*", SearchOption.AllDirectories);
}

但是我得到一个例外,说明“访问路径'C:\ Documents and Settings \'被拒绝。”

我正在使用Windows 7而我在资源管理器中看不到C:\ Documents and Settings \文件夹。我启用了“显示隐藏文件和文件夹”,甚至尝试直接键入路径,但它出现以下错误:“C:\ Documents and Settings无法访问。访问被拒绝。”

为什么Directory.GetDirectories()拉出一个似乎不存在的目录?

3 个答案:

答案 0 :(得分:15)

这个目录就是所谓的junction point,它应该指向c:\ users。

来自MSDN文档:

这些交接点可以识别如下:

他们设置了FILE_ATTRIBUTE_REPARSE_POINT,FILE_ATTRIBUTE_HIDDEN和FILE_ATTRIBUTE_SYSTEM文件属性。

他们还将访问控制列表(ACL)设置为拒绝对每个人的读取访问权。

如果具有所需权限,则调用特定路径的应用程序可以遍历这些联结点。但是,枚举连接点内容的尝试将导致失败。

答案 1 :(得分:0)

我不知道如何解决,但我可以告诉你,WinXP使用了这条路径。期望能够访问该文件夹的旧程序不会与Win7兼容,因此Microsoft将其重定向到您的Users文件夹。

如果我开始 - >运行c:\Documents and Settings我也收到Access is Denied错误。所以有些东西存在。

答案 2 :(得分:0)

在寻找答案一段时间之后 - 我决定自己编写代码。

我在这里分享基本想法和而非完整代码 - 抓住重要部分并使用它在您的代码中实现它。

为我工作。

public void directoryCrawl(string startFolder)
    {

    try
    {
        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);

        /* here you can add "dir" to some kind of list of your choice. */

        foreach (System.IO.DirectoryInfo directory in dir.GetDirectories())
        {
            try
            {
                directoryCrawl(directory.FullName);
            }
            catch
            {
                Console.Writeline("Access denied to: \"" + directory.FullName + "\".");
            }
        }
    }
    catch
    {
        if (!String.IsNullOrEmpty(startFolder))
        {
            Console.Writeline("Access denied to: \"" + startFolder + "\".");
        }
        }
        return;
    }