c#覆盖/保存当前文件

时间:2011-10-03 10:32:53

标签: c# file save overwrite

我在c#,windows窗体中编辑。我希望在同一个文件中保存文件的“新内容”(通常使用'save'选项),但是我收到IOException,[进程无法访问文件'filename',因为它正由另一个进程使用。  我有写入新文件的方法,它的工作原理。如何使用它来覆盖当前文件。

编辑: 我正在使用二进制文件http://msdn.microsoft.com/en-us/library/atxb4f07.aspx

3 个答案:

答案 0 :(得分:5)

当你加载文件时,你没有关闭FileStream或者你曾经读过它的任何内容。始终对您的流(以及实现IDisposable的其他类型)使用using statement,这应该不是问题。 (当然,如果你实际在一个单独的应用程序中打开该文件,那完全是另一个问题。)

所以而不是:

// Bad code
StreamReader reader = File.OpenText("foo.txt");
string data = reader.ReadToEnd();
// Nothing is closing the reader here! It'll keep an open
// file handle until it happens to be finalized

你应该使用更像的东西:

string data;
using (TextReader reader = File.OpenText("foo.txt"))
{
    data = reader.ReadToEnd();
}
// Use data here - the handle will have been closed for you

或者理想情况下,使用File中为您完成所有操作的方法:

string text = File.ReadAllText("foo.txt");

答案 1 :(得分:3)

检查您是否正在关闭该文件的流。如果没有,那么你就是在阻止自己。

答案 2 :(得分:1)

假设您已经正确关闭了最初用于打开和读取文件的流,根据文件的存在创建,追加或失败,您应该使用FileStream构造函数中的FileMode参数。

一切都取决于您打开FileStream的方式,请参阅此处:FileStream Constructor (String, FileMode)

如果您指定FileMode创建:

  

指定操作系统应创建新文件。如果   文件已存在,将被覆盖。这需要   FileIOPermissionAccess.Write。 System.IO.FileMode.Create是等效的   要求如果文件不存在,请使用CreateNew;   否则,请使用截断。如果文件已存在但是隐藏了   文件,抛出UnauthorizedAccessException。