访问路径......被拒绝

vex*_*exe 5 c# access-denied directory-permissions

好吧,我已经看到了很多关于这件事的问题,但仍然没有人回答我的问题。事实上,我看到的每个问题都各不相同,访问这个问题似乎真的很困扰程序员。

请查看代码:

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");
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

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()
Run Code Online (Sandbox Code Playgroud)

当然,我尝试了通常的方法:

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

但是一点都没变!

我还尝试手动更改权限,方法是右键单击 dir1 -> 属性 -> 安全性 -> 编辑 -> 添加 -> 输入每个人(在输入对象名称中选择)-> 确定 -> 所有人都可以完全控制。(我还看到我的用户帐户也有完全控制权)

任何提示将不胜感激

Mat*_*ell 5

虽然它是拒绝访问异常,但听起来文本文件正在使用中并且无法移动,因为存在对该文件的打开引用。

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();
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 顺便提一句。这里不需要 `fs.Close()` - 你有 `using` 语句来自动关闭并处理流 (2认同)