对路径的访问...被拒绝(Access To The Path … Is Denied)

2019-06-27 03:24发布

好吧,我见过吨关于这个事情的问题,但仍然没有人回答我的问题。 事实上,这些问题每一个我看到其他的不同,这种接入事情真的好像hassling程序员。

请检查出的代码:

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 - >属性 - >安全 - >编辑 - >添加 - >键入每个人(在输入对象名称来选择) - >确定 - > fullcontrol给大家。 (我也看到了,我的用户帐户有完全控制权以及)

任何提示将深表赞赏

Answer 1:

虽然这是一个拒绝访问异常,这听起来像文本文件正在使用,不能移动,因为不存在相应的文件打开引用。

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


Answer 2:

首先,你应该使用Path.Combine而不是做字符串连接。
第二关,堆栈跟踪并不太实用为被抛出的异常。

我想你的问题可能是做这虽然是固定的:

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

能否解决,那么问题是你想将它移动到DIR1的子目录。



Answer 3:

作为一个调试步骤应该设置在两个文件夹失败审核(在高级安全设置)。 只需设置每个人审核所有的失败,然后再次尝试操作。 根据您正在运行,你应该得到的用户帐户的OS版本所使用的操作及失踪了特权。 另外,还要确保没有否认,因为他们覆盖所有其他权限的文件夹设置权限。 你会想看看安全事件日志。 如果对于操作没有失败审核,那么它​​是不是权限的问题。



文章来源: Access To The Path … Is Denied