文件已存在时创建XmlWriter时出错

时间:2009-11-08 21:48:46

标签: c# xml file-io

在我的代码中,我有以下几行:

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.Indent = true;
XmlWriter writer = XmlWriter.Create(filename, writerSettings);
document.Save(writer);

filename不存在时,此方法正常。但是当它发生时,我得到了这个错误(在第3行,而不是第4行):

System.IO.IOException: Sharing violation on path [the file path]

如果文件已存在,我想覆盖该文件。我该怎么做?

3 个答案:

答案 0 :(得分:4)

如果仔细查看 IOException ,它会说这是“共享违规”。这意味着当您尝试访问此文件时,另一个程序正在使用它。通常情况下,阅读并不是一个问题,但通过写入文件,这可能会发生很多。你应该:

  • 尝试查看是否有其他程序正在使用此文件,该程序是什么,以及为什么会这样做。有些程序(特别是那些用没有良好垃圾处理功能的语言编写的程序)可能正在访问该文件,然后没有关闭IO流,从而锁定文件。还有一些实用程序(如果我的记忆正确地为我提供),允许您查看哪些进程正在使用某个文件 - 只需谷歌。
  • 当你调试程序时,你可能会杀死进程或其他东西(我有时这样做),并且 IO流可能尚未关闭。为此,最简单的修复(据我所知)只是重启。
  • 或者,问题可能来自您自己的代码。但是,当您使用C#编写时,垃圾收集以及IO功能通常可以防止此类问题,您可能忘记在某处关闭文件流。我有时这样做,找到bug的位置需要很长时间,即使修复几乎是即时的。如果您单步执行您的程序并使用观看来跟踪您的IO操作,那么找到这样的错误应该相对简单。
祝你好运!

答案 1 :(得分:1)

问题不在于文件是否存在,而是由不同的程序(或您自己的程序)使用。如果只是文件存在,它将被覆盖并且不会引起异常。

如果您的程序已创建已存在的文件,则可能是您没有正确处理创建该文件的对象,因此该文件仍处于打开状态。

答案 2 :(得分:0)

尝试使用接受Stream的XmlWriter.Create的重载,并从File.Create(filename)传入FileStream ...