大文件的复制和粘贴如何工作

Sun*_*eep 1 memory windows file-transfer computer-architecture

我很想知道计算机如何执行大文件夹的“复制”和“粘贴”。我读过在不同进程或相同进程之间复制和粘贴文本是通过将内容保存到 RAM 然后将其从那里复制到目标位置来实现的。

那么,在具有 2 GB RAM 和 4 GB 最大虚拟内存的机器上复制一个 10 GB 的文件夹时,计算机指令如何流动。文件复制与文本复制不同。

我认为这是基本问题,但感谢任何链接或见解。

gro*_*taj 5

剪贴板不必保存整个文件。当您复制一个(或多个)文件时,只有它的路径被放入剪贴板。它也被标记为一个文件 - 剪贴板会跟踪其内容的类型,如纯文本、格式化文本、文件、图像、Word 文本等。这就是为什么你不能例如在 Paint 中打开图像,按Ctrl+C然后将其粘贴到目录中 - 因为您复制了一张图片,而目录保存的是文件,而不是图片。

当您将兼容内容(即文件和/或文件夹)粘贴到目录中时,某些应用程序将处理复制/移动操作。默认情况下,它将是explorer进程(负责显示“开始”菜单和所有文件资源管理器窗口的同一个进程),但某些应用程序可能会替换它。[1]

现在会发生什么取决于你在做什么:

  • 如果您将文件移动到同一分区上的另一个目录,它不会在磁盘上物理移动,只会更新其路径[2]
  • 如果你将一个文件移动到另一个分区,它会被分成相同大小的块[3]并且这些块将被一个一个地复制,然后原始文件将被删除。太小的块会减慢进程,太大的块会消耗更多的内存。
  • 当您复制文件时(无论是否在同一分区),也会发生完全相同的情况,只是不会删除原始文件。
  • 写入外部存储(如 USB 驱动器)的工作方式并不完全相同[4],我不确定那时到底会发生什么。我的猜测是,这不是一个连续的逐块过程,而是每隔几个块就会发生其他事情(与缓冲区相关?)。如果有人对此有所了解,请随时进行编辑。

注释:

[1]。例如TeraCopy,这是一个很好的高级复制窗口替换。

[2]。硬盘上的物理文件结构与目录结构不同 - 它是扁平的,所有层次结构信息都存储在分区的单独部分中。它是如何完成的取决于文件系统(例如参见MFT)。该信息块包含有关文件位置等的所有信息。因此,当您在一个分区内移动文件时,无需物理移动它 - 只需更新路径信息。

[3]。不是字面意思,硬盘上不会有任何东西被分割。处理复制过程的程序将像有多个单独的块一样工作,但原始文件将保持不变。这纯粹是虚拟的。

[4]。您可以在使用 TeraCopy 时看到它:“预测进度”不像在固定驱动器上那样工作,而是“实际进度”赶上它,然后“预测进度”被扩展等等。Explorer 的默认复制窗口也有 USB 问题。