2012-10-05 44 views
10

Me gustaría proporcionar una forma de reconocer cuando un archivo grande está fragmentado hasta cierto punto y alertar al usuario cuando deberían realizar una desfragmentación. Además, me gustaría mostrarles una pantalla visual que demuestre cómo el archivo se rompe en pedazos en el disco.¿Cómo puedo determinar el grado en que un archivo está fragmentado?

No necesito saber cómo calcular qué tan fragmentado es, o cómo hacer la visualización. Lo que necesito saber es dos cosas: 1) cómo identificar los clústeres específicos en cualquier disco que contenga fragmentos de un determinado archivo determinado, y 2) cómo identificar el número total de clústeres en ese disco. En esencia, necesitaría una lista de todos los clusters que contienen partes de este archivo, y en qué parte del disco se encuentra cada uno de esos clusters.

La mayoría de las utilidades de desfragmentación tienen una pantalla visual que muestra cómo se distribuyen los archivos en el disco. Mi pantalla mostrará cómo un archivo en particular se divide en diferentes áreas de un disco. Solo necesito saber cómo puedo recuperar los datos necesarios para decirme dónde están ubicados los clusters/sectores del archivo en el disco, para poder determinar aún más qué tan fragmentado está.

+0

¿Está buscando identificar el archivo (s) en un sector particular, o está buscando identificar los sectores ocupados por un archivo determinado? –

+0

Los sectores ocupados por un archivo determinado. –

+5

Esta es una pregunta básica del sistema operativo (ver [NTFS] (http://en.wikipedia.org/wiki/NTFS)). La información sobre las ubicaciones físicas de los archivos en el disco implica (muy bajo nivel) paseos por la información NTFS (específicamente el MFT - ver 'Metarchivos' en la página enlazada). Es una pregunta muy amplia para hacer aquí. Estudie el enlace e investigue NTFS, y luego puede volver y hacer preguntas específicas y concisas. :-) Por ahora, votar para cerrar no es una pregunta real debido al amplio alcance. (NO perdoné, sin embargo). –

Respuesta

11

Puede usar la función DeviceIoControl con el código de control FSCTL_GET_RETRIEVAL_POINTERS.

La operación FSCTL_GET_RETRIEVAL_POINTERS recupera un tamaño variable estructura de datos que describe la asignación y ubicación en el disco de un archivo específico . La estructura describe la asignación entre los números de clúster virtuales (desplazamientos de VCN dentro del archivo o espacio de la secuencia) y números de clúster lógicos (desplazamientos LCN dentro del espacio de volumen).

+2

Mientras está allí, consulte ['IOCTL_DISK_GET_DRIVE_GEOMETRY_EX'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365171%28v=vs.85%29.aspx) para contar el sector. –

+0

Impresionante, obtuve la estructura en Delphi, ahora es tiempo de que descifre lo que realmente significa esta enorme lista de números: D Gracias. –

Cuestiones relacionadas