Veröffentlicht 23. August 200124 j 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
23. August 200124 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.