【问题标题】:Access to the path is denied [duplicate]访问路径被拒绝[重复]
【发布时间】:2011-09-10 05:34:30
【问题描述】:

对于我的 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);

【问题讨论】:

  • 你能发布引发异常的确切行吗?似乎错误是您获取路径名的方式
  • 你确定你还没有打开任何句柄(文件)吗?
  • 它叫做 UAC。您根本不应该写入该目录。幸运的是,还有其他选择。
  • 感谢您的回复。我有windows xp。我仍然尝试了上面的 appdata 文件夹。它仍然是一样的。现在的路径是 C:\Documents and settings\UserName\Application Data\672011115302AM
  • LoSciamano:这是抛出错误的代码: File.Delete(p_folderpath);其中 p_folderpath 是 C:\Documents and Settings\UserName\Application Data\672011115302AM

标签: c# wpf


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我有windows xp。我仍然尝试了上面的 appdata 文件夹。它仍然是一样的。现在的路径是 C:\Documents and settings\UserName\Application Data\672011115302AM
  • @user296623:是的,而且在 XP 中,最好也这样做。不过,在 Vista+ 中,您会遇到更多问题……
  • @user296623:如果您无法删除该文件夹,这可能意味着有什么东西正在持有一个在其中打开的文件的句柄......
【解决方案2】:

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

删除

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

复制

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多