2012-10-05 16 views
10

Vorrei fornire un modo per riconoscere quando un file di grandi dimensioni è frammentato in una certa misura e avvisare l'utente quando deve eseguire una deframmentazione. Inoltre, mi piacerebbe mostrare loro un display che mostri come il file sia effettivamente suddiviso in pezzi attraverso il disco.Come determinare il grado in cui un file è frammentato?

Non ho bisogno di sapere come calcolare quanto è frammentato, o come rendere la visualizzazione. Quello che devo sapere sono due cose: 1) come identificare i cluster specifici su qualsiasi disco che contiene parti di un determinato file specifico, e 2) come identificare il numero totale di cluster su quel disco. Avrei essenzialmente bisogno di un elenco di tutti i cluster che contengono pezzi di questo file, e dove sul disco si trova ciascuno di questi cluster.

La maggior parte delle utilità di deframmentazione hanno un display che mostra come i file sono distribuiti sul disco. Il mio display mostrerà come un particolare file è suddiviso in diverse aree di un disco. Ho solo bisogno di sapere come posso recuperare i dati necessari per dirmi dove si trovano i cluster/settori del file sul disco, così posso determinare ulteriormente quanto sia frammentato.

+0

Stai cercando di identificare i file in un particolare settore o stai cercando di identificare i settori occupati da un determinato file? –

+0

I settori occupati da un determinato file. –

+5

Questa è una domanda di sistema operativo di base (vedere [NTFS] (http://en.wikipedia.org/wiki/NTFS)). Le informazioni sulle posizioni fisiche dei file su disco coinvolgono (livello molto basso) delle passate attraverso le informazioni NTFS (in particolare la MFT - vedi 'Metafile' nella pagina collegata). È una domanda molto ampia da chiedere qui. Studia il link e cerca NTFS, quindi puoi tornare indietro e porre domande specifiche e concise. :-) Per ora, il voto per chiudere non è una domanda reale a causa della vasta portata. (Non ho fatto alcun downvoting, comunque.) –

risposta

11

È possibile utilizzare la funzione DeviceIoControl con il codice di controllo FSCTL_GET_RETRIEVAL_POINTERS.

L'operazione FSCTL_GET_RETRIEVAL_POINTERS recupera una dimensione variabile struttura di dati che descrive l'assegnazione e la posizione sul disco di un file specifico . La struttura descrive la mappatura tra numeri di cluster virtuali (offset VCN all'interno dello spazio file o flusso) e numeri di cluster logici (offset LCN all'interno dello spazio del volume).

+2

Mentre sei lì, vedi ['IOCTL_DISK_GET_DRIVE_GEOMETRY_EX'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365171%28v=vs.85%29.aspx) per il conteggio dei settori. –

+0

Impressionante, ho scaricato la struttura in Delphi, ora ho tempo di decifrare cosa significhi realmente questa enorme lista di numeri: D Grazie. –

Problemi correlati