Problem mit GetDiskFreeSpaceEx
-
Hi
Ich möchte per GetDiskFreeSpaceEx die Partitionsgrösse meiner C: Platte auslesen.ULARGE_INTEGER m_UserBytes; ULARGE_INTEGER m_TotalBytes; ULARGE_INTEGER m_FreeBytes; CString buffer; GetDiskFreeSpaceEx("C:", &m_UserBytes, &m_TotalBytes, &m_FreeBytes ); buffer.Format("%p", m_TotalBytes);
soweit sogut, nun hab ich jedoch das Problem, das die funktion
falsche werte liefert. Kann mir da bitte einer weiterhelfen?Grüsse alucard
-
Kein MFC.
Verschoben!
-
huch ^^
sorry soll nicht wieder vorkommen
Hoffe mal hier werde ich geholfen
-
[cpp]
Drive = GetDriveType( str ); // Laufwerk-Typ abfragen
if( Drive == 3) // 3 entspricht Festplatte
{
GetDiskFreeSpaceEx( str, &FreeBytes, &TotalBytes, NULL );if( FreeBytes.QuadPart /(10241024) >= limit )
{
LaufwerkIsTrue[zaehler] = TRUE;
LaufwerkFreierSpeicher[zaehler] = (UINT) (FreeBytes.QuadPart /(10241024));
}
[/cpp]
-
GetDiskFreeSpaceEx(m_drivesData, NULL, NULL, (union _ULARGE_INTEGER*)&freeBytes);
<--- damit funzt es bei mir einwandfrei
m_drivesData enthält das Laufwerk bei mir
<--- HALT!!
ich seh grad, dass die funktion bei mir genau die hälfte des freien speicherplatzes liefert .. *grml*
kann mir vielleicht jemand verraten warum?
[ Dieser Beitrag wurde am 07.06.2002 um 11:03 Uhr von Nova editiert. ]
-
weiß da jemand was?
-
Hier vielleicht auch mal ein Beispiel-Code für die FAQ für die Verwendung von FreeDiskSpaceEx, hab den Code allerdings nicht in ne WinMain gepackt, dürfte aber kein Problem sein, oder ?
:
#include <windows.h> #include <stdio.h> #include <iostream.h> void Festplattengroesse_Ermitteln (void); int main () { Festplattengroesse_Ermitteln(); return 0; } void Festplattengroesse_Ermitteln (void) { typedef BOOL (WINAPI * PGetDiskFreeSpaceExA)(LPCTSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER); // Adressspeicher BOOL gdresult=FALSE; PGetDiskFreeSpaceExA pget=NULL; char szbuffer[104]="",szlaufwerke[26][10],szhdfrei[20]=""; int n=0,ianzahl=0; unsigned __int64 i64userfrei=0,i64total=0,i64totalfrei=0; ianzahl=GetLogicalDriveStrings(104,szbuffer); // Gesamtzanzahl der logischen Laufwerke in Zeichen durch '\0' getrennt ("A:\\\0","B:\\\0" usw.) pget=(PGetDiskFreeSpaceExA)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetDiskFreeSpaceExA"); // aus der Kernel32.dll die Funktion GetDiskFreeSpaceEx laden, falls sie noch nicht geladen wurde if(pget!=NULL) { for(n=0;n<(ianzahl/4);n++) // ianzahl/4 = Laufwerke insgesamt, laufwerk aus jeweils "A:\\\0" 4 Zeichen besteht { sprintf(szlaufwerke[n],"%s",&szbuffer[n*4]); if(GetDriveType(szlaufwerke[n])==3) // Wenn Typ == 3 (Festplatte) { gdresult=pget(szlaufwerke[n],(PULARGE_INTEGER)&i64userfrei,(PULARGE_INTEGER)&i64total,(PULARGE_INTEGER)&i64totalfrei); // Ermittelt des Speichers in einen 64bit Integer if(gdresult==TRUE) { _ui64toa(i64userfrei/(1024*1024),szhdfrei,10); // wichtigste Speichergroesse in char* konvertieren, vorher von Byte nach Megabyte umrechnen (1024*1024) cout<<"Auf Laufwerk "<<szlaufwerke[n]<<" sind "<<szhdfrei<<" MB verfuegbar !"<<endl; } else cout<<"Fehler kein Zugriff auf Festplatte moeglich !"<<endl; } } } else cout<<"Funktion GetDiskFreeSpaceEx nicht verfuegbar !"<<endl; }
Funktioniert 100% !
[ Dieser Beitrag wurde am 18.12.2002 um 19:13 Uhr von BiGFusel editiert. ]