C#:将一个文本文件的* contents *附加到另一个文本文件

时间:2011-02-23 19:43:51

标签: c# file-io

可能没有其他方法可以做到这一点,但有没有办法将一个文本文件的内容附加到另一个文本文件中,同时在移动后清除第一个文本文件?

我知道的唯一方法就是使用一个读写器,这对于大型文件似乎效率低下......

谢谢!

4 个答案:

答案 0 :(得分:26)

不,我认为没有任何事情能做到这一点。

如果这两个文件使用相同的编码,并且您不需要验证它们是否有效,则可以将它们视为二进制文件,例如

using (Stream input = File.OpenRead("file1.txt"))
using (Stream output = new FileStream("file2.txt", FileMode.Append,
                                      FileAccess.Write, FileShare.None))
{
    input.CopyTo(output); // Using .NET 4
}
File.Delete("file1.txt");

请注意,如果file1.txt包含字节顺序标记,则应首先跳过此标记,以避免将其置于file2.txt的中间位置。

如果您不使用.NET 4,您可以编写自己的等效Stream.CopyTo ...即使使用扩展方法也可以无缝切换:

public static class StreamExtensions
{
    public static void CopyTo(this Stream input, Stream output)
    {
        if (input == null)
        {
            throw new ArgumentNullException("input");
        }
        if (output == null)
        {
            throw new ArgumentNullException("output");
        }
        byte[] buffer = new byte[8192];
        int bytesRead;
        while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            output.Write(buffer, 0, bytesRead);
        }
    }
}

答案 1 :(得分:7)

暂时忽略错误处理,编码和效率,这样的事情可能会起作用(但我还没有测试过)

File.AppendAllText("path/to/destination/file", File.ReadAllText("path/to/source/file"));

然后,您只需在此步骤完成后删除或清除第一个文件。

答案 2 :(得分:3)

cmd.exe版本是

  

输入fileone.txt>> filetwo.txt

     

del fileone.txt

您可以创建一个系统shell来执行此操作。它应该是非常有效的。

答案 3 :(得分:0)

我不确定你的意思是“效率低下”。对大多数情况来说,Jon的回答可能已经足够了。 但是,如果您担心极大的源文件,Memory-Mapped Files可能是您的朋友。有关详细信息,请参阅this link