C# 克隆一个文件并修改它

C# 克隆一个文件并修改它,c#,file,io,C#,File,Io,我是C#的新手,我只想把它用于一个项目。 我想编写一个程序,读取一些文件并逐行克隆它们。 如果一行是触发器,它将调用一个函数,该函数将在原始行的基础上添加一些其他行 我发现了如何使用MSHelp(官方代码段)逐行读取文件,但当我尝试在其中写入时,它只会写入最后一行,我想会删除其余的。我试过下列方法,但没有成功。 它应该只创建一个新文件,如果已经有一个文件,则覆盖,每行写入一行 using System; using System.Collections.Generic; using System

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

我发现了如何使用MSHelp(官方代码段)逐行读取文件,但当我尝试在其中写入时,它只会写入最后一行,我想会删除其余的。我试过下列方法,但没有成功。 它应该只创建一个新文件,如果已经有一个文件,则覆盖,每行写入一行

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

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

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

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

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

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

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


但是我会避免每次打开streamwriter,只打开一次,并确保刷新或关闭它。

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

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


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

我已编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。在OP中,这是一个使用声明,因此它正确关闭@LasseV.KarlsenI知道,只是你说“关闭前确保冲洗”,这是不必要的。如果文件正确关闭(此处就是),那么它也会被刷新。在OP中,它是一个using语句,所以它正确关闭了@LasseV.KarlsenI知道,只是你说“在关闭它之前确保刷新”,这是不必要的。如果文件正确关闭(在这里),那么它也会被刷新。非常感谢,我觉得c很难,因为我不习惯obj非常感谢,我觉得c很难,因为我不习惯obj