gpt4 book ai didi

c# - 如何在不重新打开文件的情况下读取然后写入/附加到文本文件?

转载 作者:行者123 更新时间:2023-11-30 20:44:57 27 4
gpt4 key购买 nike

如何打开 FileStream,读取文件内容,然后写入(追加)到文件而不重新打开文件?

在这种情况下,StreamReader/StreamWriter 的问题是 they assume ownwership of the underlying stream .由于目标是 .NET 4 "leaveOpen" constructor overloads不能使用。 (我不关心是否使用了 StreamReader/StreamWriter - 但它们确实提供了 ReadLine 和 WriteLine 操作。)

总而言之,与问题相关的有问题的代码示例以及应用程序将如何访问和管理 FileStream 的生命周期(即打开一次):

var fs = File.Open(..);
using (var reader = new StreamReader(fs)) {
// Do all reading here, then ditch the reader
} // .. but StreamReader will Close the FileStream

SeekToEnd(fs);

using (var writer = new StreamWriter(fs)) {
// Do all writing here, then ditch the writer
// .. ideal, but FileStream already Closed
}

// Finally, somewhere else:
fs.Close();

我发现的“相关”MSDN 文章总是将此显示为两个独立的步骤:这个问题是关于以面向行的方式对 Text 进行先读后写操作无需两次打开文件。

文件打开方式为

File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)

并且底层流将始终是可查找和可写的。

最佳答案

您可以将流的位置设置为流的末尾并从那里写入

 fs.Position = fs.Length;
//then do the write operations you need to do

即使您正在使用流写入器或读取器,您也应该能够修改读取器/写入器正在使用的 FileStream,这将允许您读取然后写入

using(var fs = File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)
{
using(var reader = new TextReader(fs))
using(var writer = new TextWriter(fs))
{
//read

fs.Position = fs.Length;

//write
}
}

关于c# - 如何在不重新打开文件的情况下读取然后写入/附加到文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com