c#覆盖/保存当前文件

本文关键字:文件 保存 覆盖 | 更新日期: 2023-09-27 18:10:22

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

编辑:我使用binarywriter http://msdn.microsoft.com/en-us/library/atxb4f07.aspx

c#覆盖/保存当前文件

加载文件时,很可能没有关闭FileStream或用于读取它的任何工具。总是使用using语句为您的流(和其他类型实现IDisposable),这应该不是一个问题。(当然,如果您实际上在单独的应用程序中打开该文件,则完全是另一个问题。)

所以不是:

// 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");

检查是否正在关闭文件流。

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

一切取决于你打开FileStream的方式,见这里:FileStream Constructor (String, FileMode)

如果你指定了FileMode

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