Frage

Ich mag den freien Speicherplatz auf einem komprimierten Datenträger, um es zu einem Endbenutzer zu zeigen. Ich bin mit C ++, MFC unter Windows 2000 und höher. Der Windows-API bietet die GetDiskFreeSpaceEx() Funktion.

Allerdings ist diese Funktion scheint die „unkomprimiert“ Größe der Daten zurückzukehren. Dies verursacht mir ein Problem.

Zum Beispiel:  - Festplattengröße 100 GB  - Datengröße beträgt 90 GB  - Druckdatengröße beträgt 80 GB

Der Benutzer sieht, dass die Platte 90% voll ist, aber in Wirklichkeit ist es nur 80% voll ist.


Bearbeiten

Wie Gleb wies darauf hin, ist die Funktion, die guten Informationen zurück.

Hier also ist die neue Frage: Gibt es eine Möglichkeit, sowohl die komprimierte Größe und die unkomprimierten eins zu bekommen

War es hilfreich?

Lösung

Ich glaube, Sie würden alle Dateien auf der Karte haben über, Abfrage mit GetFileSize () und GetCompressedFileSize () und summieren sie. Mit GetFileAttributes () wissen, ob eine Datei komprimiert ist oder nicht, wenn nur Teile des gesamten Volumens komprimiert wird, was sicherlich der Fall sein könnte.

  

Hum, das ist also kein triviales   Betrieb. Ich glaube, ich muss implementieren   ein Mechanismus zu vermeiden, dass alle Abfragen   Dateien Größe die ganze Zeit. Ich meine ... wenn   Ich habe eine 800 GB Festplatte, könnte es   nehmen einige sehr lange Zeit, um alle zu erhalten   Dateigröße.

True.

starten Vielleicht durch einen Scan (Programmstart), und füllen Sie Ihre benutzerdefinierte Datenstruktur ab, z.B. eine Hash / Konvertierung von Dateinamendaten struct / class Datei, abfragen, dann das Laufwerk mit FindFirstChangeNotification () und dementsprechend Ihrer internen Struktur aktualisieren.

Sie können auch über „Change Journals“ lesen möchten. Ich habe sie nie benutzt mich so nicht wissen, wie sie funktionieren, könnte aber sein wert.

Andere Tipps

Die Funktion gibt die Menge an freiem Speicherplatz richtig. Es kann durch die Verwendung dieses einfache Programm gezeigt werden.

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

Nach einem zuvor unkomprimierten Verzeichnis der freie Speicherplatz wächst komprimiert wird.

Also, was redest du?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top