可能没有其他方法可以做到这一点,但有没有办法将一个文本文件的内容附加到另一个文本文件中,同时在移动后清除第一个文本文件?
我知道的唯一方法就是使用一个读写器,这对于大型文件似乎效率低下......
谢谢!
答案 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。