访问路径…被拒绝

好吧,我已经看到很多关于这个问题的问题,但是,仍然没有人回答我的问题。 事实上,我看到的每一个问题都与另一个不同,这种访问权限似乎真的是麻烦程序员。

请查看代码:

DirectoryInfo Dir1 = Directory.CreateDirectory(Desktop + "\\DIR1"); DirectoryInfo Dir2 = Directory.CreateDirectory(Desktop + "\\DIR2"); //* Lets Create a couple of SubDirs in DIR1 for (int i = 0; i < 5; i++) { // this will create 5 SubDirs in DIR1, named Sub1, Sub2 ... Sub5. Dir1.CreateSubdirectory("Sub" + (i + 1).ToString()); //* lets create 5 text files in each SubDir: for (int j = 0; j < 5; j++) { File.Create(Dir1.FullName + "\\Sub"+(i+1).ToString() + "\\text"+(j+1).ToString() + ".txt"); } } //* Lets Move all what we created in DIR1 to DIR2 (THIS IS WHERE I'M GETTING THE EXCEPTION Directory.Move(Dir1.FullName, Dir2.FullName + "\\DIR1"); // I also Tried Dir1.MoveTo(Dir2.FullName + "\\DIR1"); 

堆栈跟踪:

 at System.IO.DirectoryInfo.MoveTo(String destDirName) at Directory_Class.Program.Main(String[] args) in c:\users\vexe\documents\visual studio 2010\Projects\Directory_Class\Directory_Class\Program.cs:line 207 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() 

当然,我试过平常:

 DirectorySecurity DirSec = Dir1.GetAccessControl(); string user = Environment.UserName; DirSec.ResetAccessRule(new FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow)); Dir1.SetAccessControl(DirSec); 

但它没有改变一点!

我也尝试手动更改权限,通过右键单击dir1 – >属性 – >安全性 – >编辑 – >添加 – >键入所有人(在输入对象名称中选择) – > ok – > fullcontrol to everyone。 (我也看到我的用户帐户也有完全控制权)

任何提示都将深受赞赏

虽然它是一个访问被拒绝的例外,但听起来像文本文件正在使用中,并且由于存在对该文件的开放引用而无法移动。

File.Create方法返回一个FileStream对象,我想这必须在修改文件之前关闭/处理。

尝试以下内部循环:

  for (int j = 0; j < 5; j++) { using(var fs = File.Create(Dir1.FullName + "\\Sub"+(i+1).ToString() + "\\text"+(j+1).ToString() + ".txt")) { //fs.WriteByte(...); fs.Close(); } } 

首先,您应该使用Path.Combine而不是进行字符串连接。
其次,堆栈跟踪没有抛出exception那么有用。

我想你的问题可能会通过以下方式解决:

 Directory.Move(Dir1.FullName, Dir2.FullName); 

如果修复它,那么问题在于您尝试将其移动到的DIR1子目录。

作为调试步骤,您应该在两个文件夹上设置失败审核(在高级安全设置下)。 只需将每个人都设置为审核所有失败,然后再次尝试操作。 根据您运行的操作系统版本,您应该获得用于操作的用户帐户以及缺少的权限。 还要确保在文件夹上没有设置拒绝权限,因为它们会覆盖所有其他权限。 您将需要查看安全事件日志。 如果没有对操作进行失败审核,那么它​​不是权限问题。