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

COD*_*ODe 12 c# file-io

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

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

谢谢!

Jon*_*eet 27

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

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

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");
Run Code Online (Sandbox Code Playgroud)

请注意,如果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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ill 7

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

File.AppendAllText("path/to/destination/file", File.ReadAllText("path/to/source/file"));
Run Code Online (Sandbox Code Playgroud)

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