c#覆盖/保存当前文件
本文关键字:文件 保存 覆盖 | 更新日期: 2023-09-27 18:10:22
我在做c#编辑器,windows窗体。我希望将文件的"新内容"保存在同一文件中(通常使用"保存"选项),但我收到IOException,[进程无法访问文件' filename',因为它正在被另一个进程使用。我有一个方法,写入一个新的文件,它的工作原理。如何使用它覆盖当前文件
编辑:我使用binarywriter http://msdn.microsoft.com/en-us/library/atxb4f07.aspx
加载文件时,很可能没有关闭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。