【问题标题】:How do I determine the degree in which a file is fragmented?如何确定文件碎片的程度?
【发布时间】:2012-09-26 22:19:56
【问题描述】:

我想提供一种方法来识别大文件何时碎片化到一定程度,并在用户应该执行碎片整理时提醒用户。此外,我想向他们展示一个可视化的展示,展示文件实际上是如何在磁盘上分解成碎片的。

我不需要知道如何计算它的碎片化程度,或者如何进行视觉展示。我需要知道两件事:1)如何识别包含任何特定给定文件片段的任何磁盘上的特定集群,以及 2)如何识别该磁盘上的集群总数。我基本上需要一个包含此文件片段的所有集群的列表,以及每个集群在磁盘上的位置。

大多数碎片整理实用程序都有一个直观的显示,显示文件是如何分布在磁盘上的。我的显示器将显示一个特定文件如何被拆分到磁盘的不同区域。我只需要知道如何检索必要的数据来告诉我文件的簇/扇区在磁盘上的位置,这样我就可以进一步确定它的碎片程度。

【问题讨论】:

  • 这是一个基本的操作系统问题(参见NTFS)。有关磁盘上文件物理位置的信息涉及(非常低级别)浏览 NTFS 信息(特别是 MFT - 请参阅链接页面中的Metafiles)。这是一个非常广泛的问题。研究链接并研究 NTFS,然后您可以回来提出具体、简洁的问题。 :-) 目前,由于范围广泛,投票结束并不是一个真正的问题。 (不过,我没有投反对票。)
  • social.msdn 上的类似讨论...:social.msdn.microsoft.com/Forums/en-AU/vcgeneral/thread/…(我也没有投反对票。投反对票的人发表评论当然很好!)
  • 还有一个类似的线程 (codeproject.com/Questions/425710/…),他们说如果没有低级内核驱动程序就无法做到这一点。
  • @DavidHeffernan 这与获取此信息的过程有关吗?它将显示在图形视图中,显示各种文件是如何在磁盘上的扇区中保存/拆分的。
  • 启动here 获取有关您需要传递给DeviceIOControl 的结构类型的信息,以便开始检索有关扇区数的信息。它甚至没有触及关于物理文件位置的部分。祝你好运。

标签: windows winapi filesystems ntfs


【解决方案1】:

您可以将DeviceIoControl 函数与FSCTL_GET_RETRIEVAL_POINTERS 控制代码一起使用。

FSCTL_GET_RETRIEVAL_POINTERS 操作检索可变大小的 描述磁盘分配和位置的数据结构 具体文件。该结构描述了虚拟之间的映射 簇号(文件或流空间内的 VCN 偏移量)和 逻辑簇号(卷空间内的 LCN 偏移量)。

【讨论】:

  • 当您在那里时,请参阅IOCTL_DISK_GET_DRIVE_GEOMETRY_EX 了解扇区数。
  • 太棒了,在 Delphi 中搞定了结构,现在是时候让我破译这个庞大的数字列表的实际含义了:D 谢谢。
猜你喜欢
  • 2011-02-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2010-10-29
相关资源
最近更新 更多