找到行时读取文件并写入文本

时间:2014-11-17 12:58:53

标签: c# visual-studio-2010 file filestream

我有一个包含很多行的文件。我逐行阅读并找到一个特定的字符串,我需要在此后插入另一行。

google -Source文件 实

谷歌 - 我应该得到的文件 stasckoverflow 实

using (var fs = File.Open(fileOutPath, FileMode.OpenOrCreate))
        {
                using (StreamReader sr = new StreamReader(fs))
                {
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (line.StartsWith("google"))
                        {

我该怎么做才能在下一行写“stasckoverflow”

1 个答案:

答案 0 :(得分:3)

您无法同时轻松地从文本文件读取和写入行。

您应该通过创建包含所需数据的新临时文件来解决此问题,然后删除旧文件并将临时文件重命名为与原始文件同名。

这些行中的某些内容应该有效(假设filePath是原始文件):

string tempPath = Path.GetTempFileName();

using (var writer = new StreamWriter(tempPath))
{
    foreach (string line in File.ReadLines(filePath))
    {
        writer.WriteLine(line);

        if (line.StartsWith("google"))
            writer.WriteLine("StackOverflow");
    }

    // If you want to add other lines to the end of the file, do it here:

    writer.WriteLine("This line will be at the end of the file.");
}

File.Delete(filePath);
File.Move(tempPath, filePath); // Rename.

如果您只想写入文件的末尾而不在文件末尾之前插入任何文本,则可以不使用临时文件来执行此操作,如下所示:

using (var writer = new StreamWriter(tempPath, append:true))
{
    writer.WriteLine("Written at end of file, retaining previous lines.");
}