如何在不重新打开文件的情况下读取然后 Write/Append 到文本文件?
How to Read from and then Write/Append to a Text File without re-opening the file?
如何打开 FileStream,读取 文件内容,然后 写入(追加)到文件而不重新打开文件文件?
在这种情况下 StreamReader/StreamWriter 的一个问题是 they assume ownwership of the underlying stream. Since the target is .NET 4 the "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();
我发现的 "relevant" MSDN 文章总是将此显示为两个单独的步骤:这个问题是关于在面向行的方式无需打开文件两次。
文件打开为
File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)
并且底层流将始终是可查找和可写的。
您可以将流的位置设置为流的末尾并从那里写入
fs.Position = fs.Length;
//then do the write operations you need to do
即使您使用的是流写入器或 reader,您也应该能够修改 reader/writer 正在使用的 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
}
}
如何打开 FileStream,读取 文件内容,然后 写入(追加)到文件而不重新打开文件文件?
在这种情况下 StreamReader/StreamWriter 的一个问题是 they assume ownwership of the underlying stream. Since the target is .NET 4 the "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();
我发现的 "relevant" MSDN 文章总是将此显示为两个单独的步骤:这个问题是关于在面向行的方式无需打开文件两次。
文件打开为
File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)
并且底层流将始终是可查找和可写的。
您可以将流的位置设置为流的末尾并从那里写入
fs.Position = fs.Length;
//then do the write operations you need to do
即使您使用的是流写入器或 reader,您也应该能够修改 reader/writer 正在使用的 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
}
}