访问路径被拒绝

问题描述:

对于我的WPF应用程序,我必须创建具有图像文件的文件夹,例如:C:\ Pearl \ Src \ TEMP。稍后,当这些文件不需要时,我将以编程方式删除这些文件夹。但我得到“进入路径”被拒绝“。我也尝试为创建的临时文件夹分配访问权限,但没有多大用处。访问路径被拒绝

using System.IO; 

var activeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

var dInfo = Directory.GetParent(Path.GetDirectoryName(activeDir); 

var dSecurity = dInfo.GetAccessControl(); 

dSecurity.AddAccessRule(new FileSystemAccessRule(@"ATSDEV\ABCD", FileSystemRights.DeleteSubdirectoriesAndFiles, AccessControlType.Allow)); 

dInfo.SetAccessControl(dSecurity); // Set the new access settings. 

var ImageDir = Path.Combine(dInfo.ToString(), "TEMP"); 

System.IO.Directory.CreateDirectory(ImageDir, dSecurity); 
+0

你能后抛出异常的确切的行? 似乎错误是你得到路径名的方式 – LoSciamano 2011-06-07 16:16:40

+0

你确定你还没有任何句柄(文件)仍然打开吗? – Polyfun 2011-06-07 16:19:50

+4

它被称为** [UAC](http://*.com/questions/5210575/does-windows-7-have-the-same-problem-as-vista/5210642#5210642)**。你根本不应该写这个目录。幸运的是,还有其他选择。 – 2011-06-07 16:23:09

在Vista +中,您不应该写入正在执行的进程的安装文件夹或父文件夹。相反,您应该考虑写入用户的AppData文件夹中的子目录,因为这会更合适,并且不会导致权限问题。

您可以通过Environment.GetFolderPathEnvironment.SpecialFolder.ApplicationData)获取相应的文件夹。

+0

感谢您的回复。我有Windows XP。我仍然尝试了上面的appdata文件夹。它仍然是一样的。现在的路径是C:\ Documents and settings \ UserName \ Application Data \ 672011115302AM – user296623 2011-06-07 16:49:35

+0

@ user296623:是的,在XP中,最好也是这样做。不过,在Vista +中,你将会遇到更多问题...... – 2011-06-07 16:51:01

+0

@ user296623:如果你不能删除该文件夹,这可能意味着某个东西正在持有一个处理文件的内容。 – 2011-06-07 16:51:34

或者您可以使用Path.GetTempPath()获取临时目录的路径并在其中创建临时数据。

使用Temp的好处是,如果您忘记了/无法清理它,当驱动器空间变慢时,系统可以帮助您清理它。

我也有这个问题,所以我在这篇文章中磕磕绊绊。我在复制/删除之前和之后添加了以下代码行。

删除

File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

复制

File.Copy(file, dest, true); 
File.SetAttributes(dest, FileAttributes.Normal);