我正在尝试连接两个非常大的文件(可能是几GB)。我没有必要保留他们的原始内容,我只对结果感兴趣。
我已经看到将一个文件追加到另一个文件的最有效方法是使用FileStream.CopyTo()。
但是,众所周知,移动操作比副本便宜得多。如果我想在文件系统中移动文件,我会使用File.Move
而不是File.Copy
。
是否有与文件流等效的内容?或者围绕文件的任何其他方式?我也可以使用非C#
方法。
答案 0 :(得分:3)
没有
文件系统移动操作只会改变文件的路径 - 这就是它的速度。当你试图合并两个文件时,无论如何都没有模拟。
您可以做的最好的事情是将第二个文件的内容附加到第一个文件 - 至少您将避免复制第一个文件。这就是FileStream.CopyTo
的作用(不要忘记先寻找第一个文件的结尾)。
答案 1 :(得分:2)
"文件"在文件系统中,概念比流更高级。很多事情正在发生,#34;引擎盖下#34;当您在文件系统中执行文件操作时,您没有意识到要优化性能等。
另一方面,文件流是一种编程概念,使您能够以更细粒度的方式处理文件。你不能简单地移动"文件流到另一个文件流; "移动"是一种由操作系统创建的错觉,正如Luaan所指出的那样,只是操作系统只是改变指向文件的指针,而不是拿起文件并将其移动到驱动器上的其他位置。
如果你考虑一下,那怎么可能真的有效呢?文件是存储在某些静态介质(例如磁盘驱动器)中的一系列零和零。您无法同时清除文件所在的1和0,并将其写入新位置。您必须先将1和0复制到新位置,然后在旧位置删除它们。如果操作系统真的这样做(而不是前面提到的指针方法),它会抽象出操作,所以似乎给用户该文件刚刚被拾取并移动到其他地方一步。