Question

Je veux obtenir l'espace libre sur un disque compressé pour le montrer à un utilisateur final. J'utilise C ++, MFC sur Windows 2000 et versions ultérieures. L'API Windows offre la fonction GetDiskFreeSpaceEx().

Cependant, cette fonction semble retourner le « non compressé » taille des données. Cela me causer un problème.

Par exemple:  - La taille du disque est de 100 Go  - La taille des données est de 90 Go  - Taille des données compressées est de 80 Go

L'utilisateur verra que le disque est plein à 90%, mais en réalité, il est seulement de 80%.


EDIT

Comme Gleb a souligné, la fonction retourne la bonne information.

Voici donc la nouvelle question: est-il possible d'obtenir à la fois la taille compressée et un non compressé

Était-ce utile?

La solution

Je pense que vous auriez à la carte sur tous les fichiers, requête avec GetFileSize () et GetCompressedFileSize () et les résumer. Utilisez GetFileAttributes () pour savoir si un fichier est compressé ou non, dans le cas où une partie seulement du volume total est comprimé, ce qui pourrait certainement être le cas.

  

Hum, donc ce n'est pas un trivial   opération. Je suppose que je dois mettre en œuvre   un mécanisme pour éviter tout interrogation   fichiers taille tout le temps. Je veux dire ... si   J'ai un disque dur 800Go, il pourrait   prendre un certain temps très long pour obtenir tous   la taille du fichier.

Vrai.

Peut-être commencer par un large balayage complet (démarrage de l'application) et remplir votre structure de données personnalisées, par exemple un hachage / carte de nom de fichier pour un fichier de données struct / classe, puis le lecteur sondage avec FindFirstChangeNotification () et mettre à jour votre structure interne en conséquence.

Vous pouvez également lire sur « Modifier les journaux ». Je ne les ai jamais utilisé moi-même donc je ne sais pas comment ils fonctionnent, mais peut-être la peine de vérifier.

Autres conseils

La fonction retourne correctement le montant de l'espace libre. Il peut être démontré en utilisant ce programme simple.

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

Après la compression d'un répertoire précédemment non compressé l'espace libre augmente.

Alors, de quoi parlez-vous?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top