我正在编写一个获取所有目录和子目录的程序。我正在使用以下代码:
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()
拉出一个似乎不存在的目录?
答案 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;
}