也许没有其他方法可以这样做,但是否有一种方法可以将一个文本文件的内容追加到另一个文本文件中,并在移动后清除第一个文件?
我知道的唯一方法是使用读取器和写入器,但对于大型文件来说似乎效率低下...
谢谢!
也许没有其他方法可以这样做,但是否有一种方法可以将一个文本文件的内容追加到另一个文本文件中,并在移动后清除第一个文件?
我知道的唯一方法是使用读取器和写入器,但对于大型文件来说似乎效率低下...
谢谢!
不,我认为没有任何东西可以做到这一点。
如果这两个文件使用相同的编码,并且您不需要验证它们是否有效,您可以将它们视为二进制文件,例如:
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);
}
}
}
Stream.CopyTo
仅适用于.NET 4 - 您使用的是哪个版本? - Jon Skeetusing
语句,它会缩进嵌套的if
语句) - Davy8暂且不考虑错误处理、编码和效率,像这样做可能会起作用(但我还没有测试过)
File.AppendAllText("path/to/destination/file", File.ReadAllText("path/to/source/file"));
一旦完成这个步骤,您只需删除或清空第一个文件即可。
这个的cmd.exe
版本是:
type fileone.txt >>filetwo.txt
del fileone.txt
你可以创建一个系统 shell 来执行此操作,它应该非常有效。
type nul > fileone.txt
。 - Randy Levy