Hi ihr,
habe eine Aufgabe gestellt bekommen, in der ein Programm in C geschrieben werden soll, dass den aktuellen Speicherplatz aller Festplatten ausgeben soll. Es soll nur unter Windows lauffähig sein, also können Windows-APIs benutzt werden. Ich hab mir nun nach etlichen Stunden Suche und probieren folgenden Code zusammengeschustert:
Mir ist auch soweit klar, was der Code macht - halbwegs verstanden hab ich ihn
Was mir noch schleierhaft ist: was genau macht diese 64bit-Arithmetik? Wieso High und Low? Wozu *E32? Wäre nett, wenn mir das jemand erklären könnte oder Links posten könnte, wo ich was darüber lesen kann... muss ehrlich sagen, dass ich nach den letzten Stunden rumdoktorn erstmal die Motivation verloren hab und jetzt 'ne Rumgoogle-Pause mache
//edit
Was mir gerade auffällt: warum ist nDrives vom Typ UINT?
habe eine Aufgabe gestellt bekommen, in der ein Programm in C geschrieben werden soll, dass den aktuellen Speicherplatz aller Festplatten ausgeben soll. Es soll nur unter Windows lauffähig sein, also können Windows-APIs benutzt werden. Ich hab mir nun nach etlichen Stunden Suche und probieren folgenden Code zusammengeschustert:
Code:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#define E32 ((double)4294967296.)
typedef struct int64s {
unsigned long Low, High;
} int64t;
void main(void)
{
char szBuffer[MAX_PATH+100];
UINT nDrive = 0;
DWORD dwLogicalDrives = GetLogicalDrives();
for(nDrive=2; nDrive<30; nDrive++)
{
if(dwLogicalDrives & (1<<nDrive))
{
UINT uType;
int64t i64TotalBytes;
int64t i64NumberOfFreeBytes;
int64t i64FreeBytesAvailable;
int fResult;
wsprintf( szBuffer, "%c:\\", nDrive+'A' );
uType = GetDriveType(szBuffer);
if(uType == DRIVE_FIXED) {
fResult = GetDiskFreeSpaceEx(szBuffer,
(PULARGE_INTEGER)&i64FreeBytesAvailable,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64NumberOfFreeBytes);
if(fResult)
printf("HD %s: Gesamt: %.2f GB\n davon verfuegbar: %.2f GB\n",
szBuffer,
((double)i64TotalBytes.High*E32 +
i64TotalBytes.Low)/(1024*1024*1024),
((double)i64FreeBytesAvailable.High*E32 +
i64FreeBytesAvailable.Low)/(1024*1024*1024));
}
}
}
}
Was mir noch schleierhaft ist: was genau macht diese 64bit-Arithmetik? Wieso High und Low? Wozu *E32? Wäre nett, wenn mir das jemand erklären könnte oder Links posten könnte, wo ich was darüber lesen kann... muss ehrlich sagen, dass ich nach den letzten Stunden rumdoktorn erstmal die Motivation verloren hab und jetzt 'ne Rumgoogle-Pause mache
//edit
Was mir gerade auffällt: warum ist nDrives vom Typ UINT?