FileStream移动而不是复制

时间:2016-10-06 11:36:51

标签: c# file stream filestream

我正在尝试连接两个非常大的文件(可能是几GB)。我没有必要保留他们的原始内容,我只对结果感兴趣。

我已经看到将一个文件追加到另一个文件的最有效方法是使用FileStream.CopyTo()

但是,众所周知,移动操作比副本便宜得多。如果我想在文件系统中移动文件,我会使用File.Move而不是File.Copy

是否有与文件流等效的内容?或者围绕文件的任何其他方式?我也可以使用非C#方法。

2 个答案:

答案 0 :(得分:3)

没有

文件系统移动操作只会改变文件的路径 - 这就是它的速度。当你试图合并两个文件时,无论如何都没有模拟。

您可以做的最好的事情是将第二个文件的内容附加到第一个文件 - 至少您将避免复制第一个文件。这就是FileStream.CopyTo的作用(不要忘记先寻找第一个文件的结尾)。

答案 1 :(得分:2)

"文件"在文件系统中,概念比流更高级。很多事情正在发生,#34;引擎盖下#34;当您在文件系统中执行文件操作时,您没有意识到要优化性能等。

另一方面,文件流是一种编程概念,使您能够以更细粒度的方式处理文件。你不能简单地移动"文件流到另一个文件流; "移动"是一种由操作系统创建的错觉,正如Luaan所指出的那样,只是操作系统只是改变指向文件的指针,而不是拿起文件并将其移动到驱动器上的其他位置。

如果你考虑一下,那怎么可能真的有效呢?文件是存储在某些静态介质(例如磁盘驱动器)中的一系列零和零。您无法同时清除文件所在的1和0,并将其写入新位置。您必须先将1和0复制到新位置,然后在旧位置删除它们。如果操作系统真的这样做(而不是前面提到的指针方法),它会抽象出操作,所以似乎给用户该文件刚刚被拾取并移动到其他地方一步。