为什么我得到一个访问拒绝错误的文档和设置文件夹
本文关键字:错误 拒绝 文档 文件夹 设置 访问 一个 为什么 | 更新日期: 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;
}