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 /(1024
    1024));
    }
    [/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. ]


Anmelden zum Antworten