FileStream 移动而不是复制
FileStream move instead of copy
我正在尝试连接两个非常大的文件(可能有几 GB)。我不需要保留他们的原始内容,我只对结果感兴趣。
我发现将一个文件附加到另一个文件的最有效方法是使用 FileStream.CopyTo()。
但是,众所周知,移动操作比复制便宜得多。如果我想在文件系统中移动文件,我会使用 File.Move
而不是 File.Copy
.
有没有等同于文件流的东西?或者围绕文件的任何其他方式?我也可以使用非C#
方法。
没有
文件系统移动操作仅更改文件路径 - 这就是速度快的原因。当您尝试合并两个文件时,没有模拟,无论如何。
您最好将第二个文件的内容附加到第一个文件中 - 至少您可以避免复制第一个文件。这就是 FileStream.CopyTo
所做的(不要忘记先查找到第一个文件的末尾)。
"Files" 在文件系统中是比流更高级的概念。当您在文件系统中执行文件操作时,发生了很多您没有意识到优化性能等的事情"under the hood"。
另一方面,文件流是一种编程概念,使您能够以更精细的方式处理文件。您不能简单地 "move" 一个文件流到另一个文件流; "moving" 是操作系统造成的一种错觉,正如 Luaan 所指出的,这只是 OS 只是更改指向文件的指针而不是拾取文件并将其移动到其他地方驾驶。
如果你仔细想想,这怎么可能真的有效?文件是存储在某些静态介质(例如磁盘驱动器)中的一系列 1 和 0。您不能同时擦除文件所在的 ones 和 zeros 并将它们写入新位置。您必须先将 1 和 0 复制到新位置,然后在旧位置删除它们。如果 OS 真的是这样做的(而不是前面提到的指针方法),它会将操作抽象出来,所以它 看起来 给用户文件只是被挑选一步到位。
我正在尝试连接两个非常大的文件(可能有几 GB)。我不需要保留他们的原始内容,我只对结果感兴趣。
我发现将一个文件附加到另一个文件的最有效方法是使用 FileStream.CopyTo()。
但是,众所周知,移动操作比复制便宜得多。如果我想在文件系统中移动文件,我会使用 File.Move
而不是 File.Copy
.
有没有等同于文件流的东西?或者围绕文件的任何其他方式?我也可以使用非C#
方法。
没有
文件系统移动操作仅更改文件路径 - 这就是速度快的原因。当您尝试合并两个文件时,没有模拟,无论如何。
您最好将第二个文件的内容附加到第一个文件中 - 至少您可以避免复制第一个文件。这就是 FileStream.CopyTo
所做的(不要忘记先查找到第一个文件的末尾)。
"Files" 在文件系统中是比流更高级的概念。当您在文件系统中执行文件操作时,发生了很多您没有意识到优化性能等的事情"under the hood"。
另一方面,文件流是一种编程概念,使您能够以更精细的方式处理文件。您不能简单地 "move" 一个文件流到另一个文件流; "moving" 是操作系统造成的一种错觉,正如 Luaan 所指出的,这只是 OS 只是更改指向文件的指针而不是拾取文件并将其移动到其他地方驾驶。
如果你仔细想想,这怎么可能真的有效?文件是存储在某些静态介质(例如磁盘驱动器)中的一系列 1 和 0。您不能同时擦除文件所在的 ones 和 zeros 并将它们写入新位置。您必须先将 1 和 0 复制到新位置,然后在旧位置删除它们。如果 OS 真的是这样做的(而不是前面提到的指针方法),它会将操作抽象出来,所以它 看起来 给用户文件只是被挑选一步到位。