StreamWriter.WriteLine方法切断下一行

时间:2011-07-12 06:12:57

标签: c# streamwriter

我正在尝试使用流阅读器逐行浏览文本文件,当我遇到特定文本时,我想在该文件中添加一个新行。但是当我这样做时,下一行的第一部分(大约一半)被切断了。我只想这样做一次,这就是“跳过”变量的原因。这就是我在做的事情:

                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();

我在这里做错了吗?

1 个答案:

答案 0 :(得分:3)

编辑:Aargh,我刚刚看到你正在尝试读取和写入同一个文件。

您不应该这样做 - 它是替换现有文本,而不是插入额外数据。你不能只是在文件中插入数据 - 这不是文件系统的工作方式。

相反,从一个文件中读取,写入另一个文件,然后在需要时随后移动文件。

我还建议你对变量的整个范围都有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");
                }
            }
        }
    }
}