Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...