2012-10-05 3 views
10

Ich möchte eine Möglichkeit bieten zu erkennen, wenn eine große Datei zu einem gewissen Grad fragmentiert ist, und warnt den Benutzer, wenn sie eine Defragmentierung durchführen sollten. Außerdem möchte ich ihnen eine visuelle Anzeige zeigen, die zeigt, wie die Datei tatsächlich in Stücke auf der Platte zerbrochen ist.Wie kann ich feststellen, wie stark eine Datei fragmentiert ist?

Ich muss nicht wissen, wie man berechnet, wie fragmentiert es ist, oder wie man die visuelle Anzeige macht. Was muß ich weiß, ist, zwei Dinge: 1), wie die spezifischen Cluster auf einem beliebigen Datenträger zu identifizieren, die Stücke von einer bestimmten angegebenen Datei enthält, und 2) wie die Gesamtzahl der Cluster auf der Festplatte zu identifizieren. Ich würde im Wesentlichen eine Liste aller Cluster benötigen, die Teile dieser Datei enthalten, und wo sich jeder dieser Cluster auf dem Datenträger befindet.

Die meisten Defragmentierungsprogramme verfügen über eine visuelle Anzeige, die anzeigt, wie die Dateien auf der Festplatte verteilt sind. In meinem Display wird angezeigt, wie eine bestimmte Datei in verschiedene Bereiche einer Festplatte aufgeteilt wird. Ich muss nur wissen, wie ich die notwendigen Daten abrufen kann, mir zu sagen, wo die Datei Cluster/Sektoren auf der Platte angeordnet sind, so kann ich weiter bestimmen, wie fragmentiert ist.

+0

Möchten Sie die Datei (en) in einem bestimmten Sektor identifizieren oder suchen Sie nach den Sektoren, die von einer bestimmten Datei belegt sind? –

+0

Die Sektoren, die von einer bestimmten Datei belegt sind. –

+5

Dies ist eine grundlegende Betriebssystemfrage (siehe [NTFS] (http://en.wikipedia.org/wiki/NTFS)). Informationen über die physischen Speicherorte von Dateien auf der Festplatte umfassen (sehr niedrige) Bandbreiten durch die NTFS-Informationen (insbesondere die MFT - siehe "Metafiles" auf der verknüpften Seite). Es ist eine sehr weit gefasste Frage, die ich hier stellen kann. Studiere den Link und recherchiere NTFS, und dann kannst du zurückkommen und konkrete, knappe Fragen stellen. :-) Vorerst wähle ich wegen des weiten Umfangs als nicht ganz richtige Frage ab. (Ich habe downvote jedoch nicht.) –

Antwort

11

Sie können die DeviceIoControl-Funktion mit dem Steuercode FSCTL_GET_RETRIEVAL_POINTERS verwenden.

FSCTL_GET_RETRIEVAL_POINTERS- Der Betrieb ruft ein Datenstruktur variabler Größe, welche die Zuordnung und Lage auf der Festplatte einer spezifischen Datei beschreibt. Die Struktur beschreibt die Zuordnung zwischen virtuellen Clusternummern (VCN-Offsets innerhalb der Datei oder im Stream-Bereich) und logischen Clusternummern (LCN-Offsets innerhalb des Datenträgerbereichs).

+2

Während Sie dort sind, finden Sie unter ['IOCTL_DISK_GET_DRIVE_GEOMETRY_EX'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365171%28v=vs.85%29.aspx) für die Sektoranzahl. –

+0

Ehrfürchtig, ich habe die Struktur in Delphi gefunden, jetzt ist es Zeit für mich zu entziffern, was diese riesige Liste von Zahlen eigentlich bedeutet: D Danke. –