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

我在这里做错了什么吗?

StreamWriter.WriteLine方法切断下一行

编辑:啊,我刚刚看到你试图读写同一个文件。

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

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

我还建议您为变量的整个范围使用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");
                }
            }
        }
    }
}