磁盘碎片整理如何工作?

Mat*_*att 3 c# defragmentation fragmentation

我想尝试写一些东西来显示硬盘驱动器的碎片程度。也许甚至可以尝试对其进行碎片整理。

但我已经意识到我并不完全理解这是如何工作的。

任何人都可以向我解释这一点,也许可以提供一些我可以从哪里开始的建议?

我主要使用 C# - 这是否是一种适合将某些东西组合在一起的语言。

提前致谢

ker*_*vin 5

请从维基百科关于磁盘碎片的文章开始

然后在那之后,就看你想走多低了。

首先是官方如何在 MSDN 上查看碎片整理文件

从文章....

  1. 使用 FSCTL_GET_VOLUME_BITMAP 控制代码在卷上找到一个足够大以接受整个文件的位置。注意 如有必要,移动其他文件以创建足够大的位置。理想情况下,在文件的第一个范围之后有足够多的未分配簇,您可以将后续范围移动到第一个范围之后的空间中。
  2. 使用 FSCTL_GET_RETRIEVAL_POINTERS 控制代码获取磁盘上文件当前布局的映射。
  3. 遍历 FSCTL_GET_RETRIEVAL_POINTERS 返回的 RETRIEVAL_POINTERS_BUFFER 结构。
  4. 使用 FSCTL_MOVE_FILE 控制代码在您行走结构时移动每个簇。注意当其他进程写入磁盘时,您可能需要在不同时间更新位图或检索结构,或两者。

有关上述内容的 C# 包装器,请查看此博客文章

最后,根据您的情况,您可以对 Win32_Volume 类使用WMI Defrag 方法

希望这可以帮助。