我尝试使用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:为何不起作用?

谢谢你的帮助。

最佳答案

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

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

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


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

09-27 14:12