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