Pregunta

Quiero obtener el espacio libre en un disco comprimido para mostrar a un usuario final. Estoy usando C ++, MFC en Windows 2000 y versiones posteriores. La API de Windows ofrece la función GetDiskFreeSpaceEx().

Sin embargo, esta función parece volver al "comprimir" tamaño de los datos. Esto me causa algún problema.

Por ejemplo:  - El tamaño del disco es 100 GB  - Tamaño de los datos es de 90 GB  - Comprimido tamaño de los datos es de 80 GB

El usuario verá que el disco está lleno al 90%, pero en realidad, es sólo el 80% de su capacidad.


Editar

Como Gleb señaló, la función devuelve la buena información.

Así que aquí es la nueva pregunta: ¿Hay una manera de conseguir tanto el tamaño comprimido y la otra sin comprimir

¿Fue útil?

Solución

Creo que tendría que asignar más de todos los archivos, consulta con GetFileSize () y GetCompressedFileSize () y sumarlos. Utilice GetFileAttributes () para saber si un archivo está comprimido o no, en caso de que sólo algunas partes de todo el volumen se comprime, lo que sin duda podría ser el caso.

  

Hum, por lo que no es un trivial   operación. Supongo que debo poner en práctica   algún mecanismo para evitar la consulta de todos   tamaño de los archivos todo el tiempo. Es decir ... si   Tengo un disco duro de 800 GB, podría   tomar algún tiempo muy largo para conseguir todo   tamaño del archivo.

Es cierto.

Tal vez empezar por un análisis completo (inicio de la aplicación) y poblar la estructura de datos personalizada, por ejemplo, un hash / mapa de nombre de archivo a archivo de datos struct / clase, entonces sondear la unidad con FindFirstChangeNotification () y actualizar su estructura interna en consecuencia.

Es posible que también quiera leer un "cambio de Revistas". Nunca los he utilizado yo así que no saben cómo funcionan, pero valdría la pena echarle un vistazo.

Otros consejos

La función devuelve la cantidad de espacio libre correctamente. Se puede demostrar a través de este sencillo programa.

#include <stdio.h>
#include <windows.h>

void main() {
    ULARGE_INTEGER p1, p2, p3;
    GetDiskFreeSpaceEx(".", &p1, &p2, &p3);
    printf("%llu %llu %llu\n", p1, p2, p3);
}

Después de comprimir un directorio previamente sin comprimir el espacio libre crece.

Entonces, ¿qué estás hablando?

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