为什么我得到一个访问拒绝错误的文档和设置文件夹

本文关键字:错误 拒绝 文档 文件夹 设置 访问 一个 为什么 | 更新日期: 2023-09-27 18:18:05

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

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:'文档和设置不可访问。拒绝访问。"

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

为什么我得到一个访问拒绝错误的文档和设置文件夹

这个目录就是所谓的连接点,它应该指向c:'users。

来自MSDN文档:

这些连接点可按如下方式确定:

他们有FILE_ATTRIBUTE_REPARSE_POINT, FILE_ATTRIBUTE_HIDDEN和FILE_ATTRIBUTE_SYSTEM文件属性集。

他们还将访问控制列表(acl)设置为拒绝所有人的读访问。

调用特定路径的应用程序如果具有所需的权限,则可以遍历这些连接点。然而,试图列举连接点的内容将导致失败。

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

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

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

我在这里分享的是基本的思想和而不是完整的代码 -把重要的部分用在你的代码中实现。

对我有用

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;
    }