我使用 Visual Basic 6.0。正如使用 VB6 所说,“使用较旧的文件 I/O 处理文件”是可能的。使用此 I/O 可以“随机”访问文件。它提供了读取和写入文件部分的机会。我想知道是否只是使用此 I/O 更改了文件的随机部分,是否真的仅更新了硬盘驱动器上的记录的该部分,或者记录了整个更改的文件,即从头到尾写入。
我使用 Visual Basic 6.0。正如使用 VB6 所说,“使用较旧的文件 I/O 处理文件”是可能的。使用此 I/O 可以“随机”访问文件。它提供了读取和写入文件部分的机会。我想知道是否只是使用此 I/O 更改了文件的随机部分,是否真的仅更新了硬盘驱动器上的记录的该部分,或者记录了整个更改的文件,即从头到尾写入。
是的,它可以只更新那部分——程序可以直接查找并写入单个字节。
操作系统以“簇”或“块”或“分配单元”的最小粒度来处理它,通常是4 kB或类似的 2 的幂(在格式化文件系统时选择)。虽然取决于操作系统和文件系统;某些“写时复制”文件系统(例如 ZFS)可能会重写整个“记录”(可能大到 128 kB 甚至 4 MB)。
磁盘随机访问的绝对最小值通常是一个磁盘扇区,对于 HDD通常为512 字节或 4096 字节。(在 SSD 上,它的物理尺寸更大,但它们仍然在固件中模拟 512 字节扇区。)
因此,如果更新单个字节,操作系统将需要读取和重写至少 512 字节的扇区,但通常不需要读取和重写整个文件。