我在c#,windows窗体中编辑。我希望在同一个文件中保存文件的“新内容”(通常使用'save'选项),但是我收到IOException,[进程无法访问文件'filename',因为它正由另一个进程使用。 我有写入新文件的方法,它的工作原理。如何使用它来覆盖当前文件。
编辑: 我正在使用二进制文件http://msdn.microsoft.com/en-us/library/atxb4f07.aspx
答案 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。