文件流移动而不是复制



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

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

但是,正如大家所知,移动操作比复制操作便宜得多。如果我想在文件系统中移动文件,我会使用File.Move而不是File.Copy

是否有与文件流相等的东西?或者用其他方法来包围文件吗?我也可以使用非C#方法

No.

文件系统移动操作只改变文件的路径——这就是它快速的原因。当你试图合并两个文件时,没有类似的情况,无论如何。

最好是将第二个文件的内容附加到第一个文件中——至少可以避免复制第一个文件。这就是FileStream.CopyTo所做的(不要忘记首先查找第一个文件的末尾)。

文件系统中的"文件"是比流高得多的概念。当您在文件系统中执行文件操作时,很多事情正在"幕后"发生,您没有意识到这些事情可以优化性能等。

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

如果你仔细想想,这怎么可能呢?文件是存储在某种静态介质(如磁盘驱动器)中的一系列1和0。您不能同时清除文件所在位置的1和0并将它们写入新位置。您必须首先将1和0复制到新位置,然后在旧位置删除它们。如果操作系统真的这样做(而不是前面提到的指针方法),它会抽象出操作,所以它对用户来说似乎是文件只是被拿起并移动到其他地方。

相关内容

  • 没有找到相关文章

最新更新