克隆文件并对其进行修改

时间:2015-06-06 13:10:22

标签: c# file io

我是C#的新手,我只想将它用于项目。 我想编写一个程序来读取一些文件并逐行克隆它们。 如果一行是一个触发器,它将调用一个函数,该函数将添加原始行的一些其他行。

我发现了如何使用ms help(官方片段)逐行读取文件,但是当我尝试写入它时,它只写下最后一行,删除其余的我猜。我尝试了以下但没有成功。 它应该只创建一个新文件并覆盖,如果已经有一个,每行写一行。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Collections.Generic;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int counter = 0;
            string line;

            // Read the file and display it line by line.
            System.IO.StreamReader file =
                new System.IO.StreamReader(@"c:\test.txt");
            while ((line = file.ReadLine()) != null)
            {
                using (StreamWriter outfile = new StreamWriter(@"c:\test2.txt"))
                outfile.write(line);
                counter++;
            }

            file.Close();
            System.Console.WriteLine("There were {0} lines.", counter);
            // Suspend the screen.
            System.Console.ReadLine();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

问题是您在每次迭代时打开输出文件。相反,您应该同时打开这两个文件:

using (var reader = File.OpenText(@"c:\test.txt"))
{
    using (var writer = File.CreateText(@"c:\test2.txt"))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            // Handle triggers or whatever
            writer.WriteLine(line);
        }
    }
}

答案 1 :(得分:1)

它不会删除您编写的内容,而是覆盖它。您需要以追加模式打开流编写器:

StreamWriter outfile = new StreamWriter(@“c:\ test2.txt”,true)

但我会避免每次都打开编写器,打开一次并确保刷新或关闭它。