我做错了什么? GetDiskFreeSpaceExA的功能根本不起作用

时间:2018-07-17 14:07:35

标签: c++ windows winapi

我尝试使用GetDiskFreeSpaceExA函数,但是不起作用:

int drvNbr = PathGetDriveNumber(db7zfolderw);

if (drvNbr == -1)   // fn returns -1 on error
{
    const char * errmsg = "error occured during get drive number";
    strcpy_s(retmsg, strlen(errmsg) + 1, errmsg);
    return -3;
}

char driverletter = (char)(65 + drvNbr);
string driverstr(1, driverletter);
driverstr = driverstr + ":";

PULARGE_INTEGER freespace = 0;
                PULARGE_INTEGER totalnumbtype = 0; 
                PULARGE_INTEGER totalnumberfreebyte = 0;


                    fileSize = SzArEx_GetFileSize(&db, i);
                    BOOL myresult=GetDiskFreeSpaceExA(
                        driverstr.c_str(),
                        freespace,
                        totalnumbtype,
                        totalnumberfreebyte
                        );

变量freespace的值为0。我不知道为什么变量driverstr.c_str()的值是D:为何不起作用?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要提供指向将保存返回值的变量的指针。现在,您重新提供了空指针,因此什么也不会改变:

::ULARGE_INTEGER freespace{};
::ULARGE_INTEGER totalnumbtype{}; 
::ULARGE_INTEGER totalnumberfreebyte{};

::BOOL myresult
{
    ::GetDiskFreeSpaceExA
    (
        driverstr.c_str()
    ,   &freespace
    ,   &totalnumbtype
    ,   &totalnumberfreebyte
    )
};

使用这些函数的宽字符版本也是一个好主意。