StreamWriter.WriteLine方法切断下一行
本文关键字:一行 WriteLine 方法 StreamWriter | 更新日期: 2023-09-27 18:01:44
我正在尝试使用流阅读器逐行浏览文本文件,当我遇到特定文本时,我想在该文件中添加新行。但是当我这样做时,下一行的第一部分(大约一半)被切断。我只想做一次,这就是skip变量存在的原因。下面是我正在做的:
var fileStream = new FileStream(fileName, FileMode.Open);
var writer = new StreamWriter(fileStream);
var reader = new StreamReader(fileName);
string line;
var skip = false;
using (writer) {
using (reader) {
while ((line = reader.ReadLine()) != null) {
if (line.Contains("some text") && !skip) {
writer.WriteLine("some text something else");
skip = true;
}
}
}
}
fileStream.Close();
我在这里做错了什么吗?
编辑:啊,我刚刚看到你试图读写同一个文件。
你不应该这样做——它是替换现有的文本,而不是插入额外的数据。不能只在文件中插入数据——这不是文件系统的工作方式。
相反,从一个文件读取,写入另一个文件,然后在需要时移动这些文件。
我还建议您为变量的整个范围使用using
语句,而不是像这里这样使用它们。像这样:
void CopyAndEdit(string inputFile, string outputFile)
{
// In .NET 4 you can use File.ReadLines which will
// return an IEnumerable<string>
using (TextReader reader = File.OpenText(inputFile))
{
using (TextWriter writer = File.CreateText(outputFile))
{
bool editing = true;
string line;
while ((line = reader.ReadLine()) != null)
{
writer.WriteLine(line);
if (editing && line.Contains("some text"))
{
editing = false;
writer.WriteLine("some text something else");
}
}
}
}
}