InsanityX Geschrieben 23. August 2001 Geschrieben 23. August 2001 Hi, ich habe ein Problem, und zwar muss ich für ein Tool herausfinden, wieviel Festplattenplatz verfügbar ist. Und zwar muss das Programm auf allen Win-Plattformen (Win95-WIn2000) laufen. Ich habe den Befehl GetDiskFreeSpaceEx gefunden, aber dieser liefert mir meiner Meinung nach Phantasie-Ergebnisse. Vielleicht bin ich auch zu blöd , diesen Befehl zu verstehen. Anbei mein Sourcecode. Ich will das Ergebniss des leeren Speichers in einen Array schreiben. Wäre nett, wenn mir wer helfen kann Source: int drive, i, nFreespace; static char path[_MAX_PATH]; CString sLaufwerksbuchstabe, sFreespace; char *lpStrLaufw ; _ULARGE_INTEGER lpFreeBytesAvailable; _ULARGE_INTEGER lpTotalNumberOfBytes; _ULARGE_INTEGER lpTotalNumberOfFreeBytes; int *i64FreeBytesToCaller, int *i64TotalBytes, i64FreeBytes; int MB=1024*1024; i=0; lpStrLaufw="C:\\" ; /* Schreiben der Laufwerksbuchstaben in einen Array */ for( drive = 1; drive <= 26; drive++ ) if( !_chdrive( drive ) ) { i++; /*sLaufwerksbuchstabe.Format( "%c:\\", drive + 'a' - 1 ); GetDiskFreeSpaceEx(sLaufwerksbuchstabe, &lpFreeBytesAvailable, &lpTotalNumberOfBytes, &lpTotalNumberOfFreeBytes); sa_DriveLetter[i].Add(sLaufwerksbuchstabe); sFreespace.Format("%d MB %d MB %d", &lpTotalNumberOfFreeBytes,&lpFreeBytesAvailable, &lpTotalNumberOfBytes); //sa_Freespace[i].Add(sFreespace);*/ int fResult = GetDiskFreeSpaceEx (lpStrLaufw, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); sFreespace.Format("%d MB %d MB %d", &i64FreeBytesToCaller, &i64TotalBytes, &i64FreeBytes); Ben
MadMatrix Geschrieben 23. August 2001 Geschrieben 23. August 2001 Die letzte Zeile deines Quellcodes ist falsch: sFreespace.Format("%d MB %d MB %d", &i64FreeBytesToCaller, &i64TotalBytes, &i64FreeBytes); Die Formatangabe %d muss zu %I64d erweitert werden, außerdem musst du Variablen selbst an Format() übergeben, und nicht ihre Addresse. Kurz gesagt: sFreespace.Format("%I64d Bytes %I64d Bytes %I64d Bytes", i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes); Das sollte funtionieren, anbei noch ein Quellcode: int drive; char szDrive[4]; char szBuffer[200]; ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes; for( drive = 1; drive <= 26; drive++ ) { if( !_chdrive( drive ) ) { sprintf(szDrive, "%c:\\", drive + 'a' - 1 ); GetDiskFreeSpaceEx(szDrive, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); TotalNumberOfFreeBytes.QuadPart = Int64ShraMod32(TotalNumberOfFreeBytes.QuadPart, 20); TotalNumberOfBytes.QuadPart = Int64ShraMod32(TotalNumberOfBytes.QuadPart, 20); FreeBytesAvailable.QuadPart = Int64ShraMod32(FreeBytesAvailable.QuadPart, 20); sprintf(szBuffer, "%I64d MB free to caller, %I64d MB total free, %I64d MB total", TotalNumberOfFreeBytes.QuadPart, FreeBytesAvailable.QuadPart, TotalNumberOfBytes.QuadPart); } } Ich hoffe, dass das dir hilfe, bis denn dann, MadMatrix
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden