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