freier Festplattenplatz
-
Hallo!
Ich benötige eine einfach Funktion, die mir den freien Festplattenplatz in Byte liefert. Sowas gibt es doch bestimmt schon. Hat da jemand nen link? Oder nen Tip wie ich das einfach selbst machen kann würde auch reichen. Habe da leider nichts drüber gefunden.
Besten Dank!
-
Hallo,
ich würde je nach Betriebssystem einfach eine entsprechnede API Funktion aufrufen.
Für W32 z.B.BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName,
LPDWORD lpSectorsPerCluster,
LPDWORD lpBytesPerSector,
LPDWORD lpNumberOfFreeClusters,
LPDWORD lpTotalNumberOfClusters
);Gruß Lars
-
Hallo!
Ich habe mir die Methode mal angeschaut und bin in der hilfe auf die Methode
BOOL GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName, // pointer to the directory name
PULARGE_INTEGER lpFreeBytesAvailableToCaller, // receives the number of bytes on
// disk available to the caller
PULARGE_INTEGER lpTotalNumberOfBytes, // receives the number of bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // receives the free bytes on disk
);gestossen. Ich denke die sollte das können, was ich brauche. Mein Problem ist jetzt, daß ich nicht weiß, was ein PULARGE_INTEGER ist. Ich bräuchte am besten den dem user verfügbaren freien Festplattenlatz als einen double Wert in Byte. Kann ich das mit dieser Funktion einfach bekommen oder gibt es noch einen besseren Weg?
-
Hallo
Schau dir doch das Beispiel auf
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getdiskfreespaceex.asp
an. PULARGE_INTEGER ist ein typedef auf __int64.bis bald
akari
-
Danke für den Tip, aber das hilft mir leider nicht viel weiter. Ist wohl zu hoch für mich. Gibt es denn keine einfachere Möglichkeit, den freien Plattenplatz bzw. den dem Anwender zur Verfügung stehenden Plattenplatz zu bekommen. Ich möchte doch nur überprüfen, ob eine Datei noch auf die Platte paßt. Hätte nicht gedacht, daß das so ein Aufwand ist.
-
Das ist eine sehr einfach Möglichkeit (wenn Windows benutzt)!
Denk dir die Methode so:bool GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName, //mit TEXT("mein_string") unsigned* lpFreeBytesAvailable, unsigned* lpTotalNumberOfBytes, unsigned* lpTotalNumberOfFreeBytes );
-
Wenn ich die Funktion so betrachte sehe ich da ein Problem. Was für ein unsigned* muß das denn sein, oder bin ich grade zu verpeilt. Ich bräuchte das wie gesagt am besten in nem double wert, und die sind doch nicht vom Typ unsigned. Und wenn ich nen unsigned long nehme kann ich ja nur bis 4 Mrd. gehen, das reicht leider nicht. Oder ist das ein spezial Datentyp? *nichtpeil*
-
akari schrieb:
PULARGE_INTEGER ist ein typedef auf __int64.
Knapp daneben
dercmdr schrieb:
Wenn ich die Funktion so betrachte sehe ich da ein Problem. Was für ein unsigned* muß das denn sein, oder bin ich grade zu verpeilt.
Das muss die Adresse der Variablen sein, in der hinterher der Wert stehen soll. Es geht übrigens nicht um unsigned*, sondern um die Adresse einer ULARGE_INTEGER. Das ist eine union (steht in der MSDN Library). Leg davon drei an, übergib die Adressen beim Funktionsaufruf, und hol dir aus dem QuadPart-Member den Wert für deinen Double.
-
Auf POSIX-Systemen entsprechend mit statfs, zum Beispiel:
#include <stdio.h> #include <sys/statfs.h> int main(void) { struct statfs s; statfs("/", &s); printf("%d\n", s.f_bavail * s.f_bsize); }
-
Ah nu hab ichs gerallt, besten Dank!
-
Einfach drauf losbenutzen..
Irgendwann merkst du dann was das ist, und
was das kann