Pregunta

¿Cuál es la lógica detrás de desfragmentación de disco y comprobación de disco en Windows? ¿Puedo hacerlo con C # codificación?

¿Fue útil?

Solución

Para completarlo, aquí es una API de C # envoltorio para la desfragmentación:

http://blogs.msdn.com/jeffrey_wall/ archivo / 2004/09/13 / 229137.aspx

La desfragmentación con estas API está (se supone que) muy seguro hoy en día. Usted no debe ser capaz de corromper el sistema de archivos, incluso si quisiera.

programas de desfragmentación comerciales utilizan las mismas API.

Otros consejos

La desfragmentación de archivos en MSDN para posibles ayudantes API.

Usted debe pensar cuidadosamente sobre el uso de C # para esta tarea, ya que puede introducir algo de sobrecarga no deseada para el cálculo de referencias en Win32 nativo.

Si usted no sabe la lógica para la desfragmentación, y si usted no escribió el sistema de archivos a sí mismo por lo que no puede comprobar con autoridad que no tenga errores, ¿por qué no iniciar nuevos procesos en ejecución 'desfragmentación' y 'chkdsk' ?

Mark Russinovich escribió un artículo Inside Windows NT desfragmentación de disco una hace tiempo que ofrece datos en profundidad. Si realmente quieres hacer esto yo realmente le indique que use las instalaciones integradas para la desfragmentación. Más aún, en los últimos sistemas operativos nunca he visto una necesidad como usuario para siquiera se preocupan por la desfragmentación; que se llevará a cabo de forma automática en un horario y la gente NTFS en la EM son definitivamente más inteligente en esas cosas de lo que (lo siento, pero lo hacen desde hace algún tiempo, no lo hace).

A pesar de su importancia, el sistema de archivos no es más que una estructura de datos que asigna nombres de archivo en las listas de bloques de disco. Y realiza un seguimiento de la meta-información, tales como la longitud real del archivo y los archivos especiales que mantienen listas de archivos (por ejemplo, directorios). Un corrector de disco verifica que la estructura de datos es consistente. Es decir, cada bloque del disco debe ser libre para la asignación a un archivo o pertenecen a un único archivo. También puede comprobar si hay ciertos casos en los que aparece un conjunto de bloques de disco a ser un archivo que debe estar en un directorio, pero no es por alguna razón.

La desfragmentación se trata de mirar las listas de bloques de disco asignados a cada archivo. Los archivos se cargan más rápido en general, si utilizan un conjunto contiguo de bloques en lugar de los dispersos por todo el disco. Y en general todo el sistema de archivos va a funcionar mejor si todos los bloques de disco en uso se limitan a un único intervalo congtiguous del disco. Así, el truco está moviendo bloques de disco alrededor de seguridad para lograr este fin sin destruir el sistema de archivos.

La principal dificultad en este caso se está ejecutando estas aplicaciones, mientras que un disco está en uso. Es posible, pero uno tiene que ser muy, muy, muy cuidadoso de no hacer algún tipo de error manifiesto o extremadamente sutil y destruir la mayor parte o la totalidad de los archivos. Es más fácil trabajar en una línea de sistema de archivos.

La otra dificultad es tratar con las complejidades del sistema de archivos. Por ejemplo, sería mucho mejor construir algo que es compatible con FAT32 en lugar de NTFS porque el primero es un sistema de archivos mucho, mucho más simple.

Como siempre y cuando tenga acceso al bloque de bajo nivel y de alguna manera sensata para hacer frente a los problemas de concurrencia (mejor manejados por trabajar en el sistema de archivos cuando no está en uso) que puede hacer esto en C #, Perl o cualquier idioma que similares.

Pero tenga mucho cuidado. Las primeras versiones del programa va a destruir sistemas de archivos enteros. Las versiones posteriores lo harán, pero sólo bajo circunstancias poco claras. Y los usuarios llegar a ser extremadamente enojado y litigiosa si se destruye sus datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top