路径访问被拒绝:****。

8
我知道这方面已经有很多资料了,我也尝试了一些方法,但都没有成功解决问题。
我有一个用C#编写的程序,已经构建了一个XML文档,现在想将其保存到“我的文档”文件夹中。但是当调用XMLDoc.Save函数时,出现以下异常:
“拒绝访问路径'C:\ Users \ Ash \ Documents \ ConfigOutput'。”
我已将Visual Studio以管理员身份运行。有没有什么想法如何解决呢?
我也尝试将其保存到桌面和C:\文件夹中,但也没有成功。
我正在使用Windows 7。
运行已构建的可执行文件似乎也不起作用。
对不起,伙计们,看来我很愚蠢。我确实没有将输出路径添加到文件名中。我不会删除这个问题,以防其他人也会被这个问题所困扰!感谢所有的帮助/评论。

你尝试过将它保存到C盘根目录或其他文件夹吗?这可能与用户文件夹上的UAC和权限有关 - 这是在Win7还是Vista上? - Charleh
尝试以管理员身份运行应用程序,而不是在 Visual Studio 中运行。 - Bali C
1
你指定的文件名是什么? - Rich
2
“ConfigOutput”是一个目录的名称还是您想要使用的文件名?如果它是一个已经存在的目录,那么我也会得到这个错误。您需要在路径中包含一个文件名。 - anton.burger
5个回答

12

有几种可能性:

  • ConfigOutput是一个文件夹
  • ConfigOutput是一个正在使用(已打开)的文件
  • 您没有以用户'Ash'的身份登录

通常情况下,您不需要以管理员身份运行才能写入自己的文档文件夹。


5

您需要检查并获取写入该目录/文件的权限..为此使用 Security namespace

var permissionSet = new PermissionSet(PermissionState.None);    
var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, pathToFolder);
permissionSet.AddPermission(writePermission);

if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
{
    // do your stuff
}
else
{
    // alternative stuff
}

4

看起来您没有指定文件名,因此无法创建与现有目录同名的文件 - 请尝试将路径更改为:

C:\Users\Ash\Documents\ConfigOutput\Out.xml


2

尝试以管理员身份运行您的应用程序。

如果您想调试您的应用程序,请将您的Visual Studio也作为管理员启动。

要强制应用程序以管理员身份启动,请查看此线程: 如何强制我的.NET应用程序以管理员身份运行?

P.S.检查您的文件是否已被另一个FileStream等打开。


1

我不知道这是否有所不同,但您可能希望以相对而非绝对方式指定文件夹:Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)将为您提供当前用户文档的路径。检查它是否与您提供的路径不同。

如果是这样,您可能需要以不同的用户或管理员身份运行应用程序,正如其他人所指出的那样。显然,一个用户不能只是将文件保存到另一个用户的文档文件夹中。

对于我来说,当我从Visual Studio调试我的应用程序时,文档文件夹与我当前登录并在Visual Studio下运行的用户相同。

您可以首先尝试<requestedExecutionLevel level="asInvoker" uiAccess="true|false"/>,然后逐步移动到highestAvailablerequireAdministrator

或者,要求权限,捕获异常并将其打印出来:

try {
        FileIOPermission fileIOPermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, myDocFolderFile);
        fileIOPermission.Demand();
    } catch (SecurityException se) {
        Debug.WriteLine(se.ToString());
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接