Domanda

Voglio ottenere lo spazio libero su un disco compresso per mostrarlo a un utente finale. Sto utilizzando C ++, MFC su Windows 2000 e versioni successive. L'API di Windows offre la funzione GetDiskFreeSpaceEx().

Tuttavia, questa funzione sembra tornare il "non compresso" dimensioni dei dati. Questo mi causa qualche problema.

Ad esempio:  - dimensioni del disco è di 100 GB  - dimensione dei dati è di 90 GB  - dimensione dei dati compressi è di 80 GB

L'utente vedrà che il disco è pieno al 90%, ma in realtà, è pieno solo l'80%.


Modifica

Come Gleb ha sottolineato, la funzione restituisce la buona informazione.

Quindi, ecco la nuova domanda: c'è un modo per ottenere sia la dimensione compresso e quello compresso

È stato utile?

Soluzione

Credo che sarebbe necessario mappare su tutti i file, query con GetFileSize () e GetCompressedFileSize () e li riassumere. Utilizzare GetFileAttributes () per sapere se un file è compresso o meno, nel caso in cui solo alcune parti del tutto il volume è compresso, che potrebbe certamente essere il caso.

  

Hum, in modo che non è un banale   operazione. Suppongo che deve implementare   un meccanismo per evitare interrogare tutti   file Formato Tutto il tempo. Voglio dire ... se   Ho un hard disk da 800 GB, che poteva   richiedere un certo tempo molto lungo per ottenere tutti   dimensione del file.

True.

Forse iniziare con una scansione completa (avvio dell'applicazione) e popolare la vostra struttura dati personalizzato, ad esempio un hash / mappa dal nome del file per il file di dati struct / classe, quindi il polling del disco con FindFirstChangeNotification () e aggiornare la struttura interna di conseguenza.

Si potrebbe anche voler leggere su "Modifica Journals". Io li ho mai usato me stesso quindi non so come funzionano, ma potrebbe essere la pena di verificare.

Altri suggerimenti

La funzione restituisce la quantità di spazio libero in modo corretto. Esso può essere dimostrata utilizzando questo semplice programma.

#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);
}

Dopo la compressione di una directory in precedenza non compresso lo spazio libero cresce.

Allora, cosa stai parlando?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top