XmlDocument 保存抛出访问被拒绝

问题描述 投票:0回答:3

我正在尝试将 XML 字符串保存到 XML 文件。在大多数情况下,XML 文件已经存在,我想覆盖它。目前我收到一个异常,说对该文件的访问被拒绝。

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xmlString);
xDoc.Save(filePath);

如果我先添加这个:

if(File.Exists(filePath)
{
    File.Delete(filePath);
}

那就没问题了。所以我假设它不会让我重写文件?我不想每次都删除文件。

这里的正确解决方案是什么?我应该先尝试加载文件,然后用我的 xml 替换它的所有内容吗?

c# xml file-io xmldocument
3个回答
0
投票

你可以尝试写入xml文件

using (TextWriter writer = new StreamWriter(filePath))
            {
                doc.Save(writer);
                writer.Close();
            }


0
投票

在您的问题中包含异常类型和消息可能对您有所帮助。如果您收到 UnauthorizedAccessException,这些通常有两种情况:缺少权限和并发文件访问。

由于您可以通过托管文件访问调用删除文件(我假设您是通过相同的实用程序和凭据执行的),因此可能值得查看在您尝试保存时哪些进程可以访问您的文件。如果有另一个进程打开或写入该位置(包括文本编辑器),或者如果另一个进程正在使用自定义权限分配写入文件(可能缺少“创建文件/写入数据”权限并包括“删除文件”特权),它可能会导致这种类型的异常。

如果您的程序是该文件的唯一使用者,并且您一次只执行一个线程,您可能需要进行完整性检查您的文件从父文件夹继承了哪些权限。


0
投票

如果文件(filePath)存在,并且它有隐藏属性,XmlDocument.Save()会导致Access Denied发生。

© www.soinside.com 2019 - 2024. All rights reserved.