InsanityX Geschrieben 23. August 2001 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MadMatrix Geschrieben 23. August 2001 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
InsanityX Geschrieben 27. August 2001 Autor Teilen Geschrieben 27. August 2001 Vielen Dank, das funzt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.