C#访问路径’C:\ Documents and Settings \’被拒绝

我正在使用一个简单的DirectoryInfo来获取C盘上根目录下的所有目录。 但是,我在管理员下运行,我得到路径访问被拒绝的错误,下面是我正在运行的代码。 如何解决路径访问问题?

 DirectoryInfo Dinfo = new DirectoryInfo(@"C:\"); DirectoryInfo[] directories = Dinfo.GetDirectories("*.*", SearchOption.AllDirectories); 

在较新版本的Windows C:\Document and Settings是一个连接点 ,一种文件系统快捷方式。 它不是一个普通的目录,这意味着它并不像普通目录那样真正起作用。

如果在开始 – >运行框中键入C:\Document and Settings ,您还将收到拒绝访问错误,因此它不是您的程序特有的。

但是我对它的运作方式感到有些困惑。 我认为联结点将是到新位置的透明链接,即c:\users但显然不是。

编辑

在看了重复的问题后,我不那么困惑了。 连接点确实链接到新位置,即c:\users 。 但是,有一个明确的拒绝acl用于读取连接点以防止任何人使用它来读取内容:

C:> cacls“Documents and Settings”C:\ Documents and Settings Everyone 🙁 DENY)(特殊访问:)

  FILE_READ_DATA Everyone:R NT AUTHORITY\SYSTEM:F BUILTIN\Administrators:F 

C:>

如果您以管理员身份运行,您可能仍会遇到

  • UAC活跃。 使用“run as …”修复
  • 您只能在明确获得所有权时才能访问的文件夹。

C:\ Document and Settings是一个交接点,另外您无法访问系统卷信息目录。它位于C:\ root上,您必须捕获任何安全exception并跳过它来处理您的代码。

 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security; using System.Text; using System.Threading.Tasks; namespace Solution { public class Program { static void Main(string[] args) { DirSearch(@"YOUR PATH"); Console.ReadKey(); } static void DirSearch(string dir) { try { foreach (string f in Directory.GetFiles(dir)) Console.WriteLine(f); foreach (string d in Directory.GetDirectories(dir)) { Console.WriteLine(d); DirSearch(d); } } catch (System.Exception ex) { Console.WriteLine(ex.Message); } } } }