我正在尝试使用流阅读器逐行浏览文本文件,当我遇到特定文本时,我想在该文件中添加一个新行。但是当我这样做时,下一行的第一部分(大约一半)被切断了。我只想这样做一次,这就是“跳过”变量的原因。这就是我在做的事情:
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();
我在这里做错了吗?
答案 0 :(得分:3)
您不应该这样做 - 它是替换现有文本,而不是插入额外数据。你不能只是在文件中插入数据 - 这不是文件系统的工作方式。
相反,从一个文件中读取,写入另一个文件,然后在需要时随后移动文件。
我还建议你对变量的整个范围都有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");
}
}
}
}
}