【问题标题】:GetDiskFreeSpaceExA Woes [duplicate]GetDiskFreeSpaceExA 问题 [重复]
【发布时间】:2021-11-02 07:53:54
【问题描述】:

我不明白这里的一些东西。我正在尝试使用GetDiskFreeSpaceExA 函数来获取驱动器的驱动器空间。当我运行以下代码时:

// Setup the DWORD variables.
PULARGE_INTEGER lpFreeBytesAvailableToCaller{},
    lpTotalNumberOfBytes{},
    lpTotalNumberOfFreeBytes{};

// Lets construct the drive letter based on what the user passed.
/*std::string letter;
letter += driveLetter;
letter += ":\\";
letter += "\0";*/

if (GetDiskFreeSpaceExA(NULL, lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes)) {
    std::cout << lpTotalNumberOfBytes << "\n";
}

我得到的只是“0000000000000000”。我知道我缺少一些东西,有人可以解释一下吗?

【问题讨论】:

  • lpTotalNumberOfBytes 是一个空指针,您正在打印它的地址(这并不奇怪)。一般来说,你调用函数的方式是错误的,你没有任何内存可以写入结果
  • 看来你不明白将变量传递给函数by valueby pointerby reference之间的区别。

标签: c++ winapi space disk


【解决方案1】:

您正在将 NULL 指针 传递给 GetDiskFreeSpaceExA(),它们没有指向任何有意义的地方以将其输出值写入。

声明本地非指针变量,并使用&amp;地址运算符将它们传递给GetDiskFreeSpaceExA(),例如:

// Setup the DWORD variables.
ULARGE_INTEGER FreeBytesAvailableToCaller,
    TotalNumberOfBytes,
    TotalNumberOfFreeBytes;

// Lets construct the drive letter based on what the user passed.
/*std::string letter;
letter += driveLetter;
letter += ":\\";
letter += "\0";*/

if (GetDiskFreeSpaceExA(/*letter.c_str()*/NULL, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) {
    std::cout << TotalNumberOfBytes.QuadPart << "\n";
}

或者,GetDiskFreeSpaceExA() 让您只查询您真正想要的值,如果您不打算使用所有这些值,则不需要全部询问,例如:

// Setup the DWORD variables.
ULARGE_INTEGER TotalNumberOfBytes;

// Lets construct the drive letter based on what the user passed.
/*std::string letter;
letter += driveLetter;
letter += ":\\";
letter += "\0";*/

if (GetDiskFreeSpaceExA(/*letter.c_str()*/NULL, NULL, &TotalNumberOfBytes, NULL)) {
    std::cout << TotalNumberOfBytes.QuadPart << "\n";
}

【讨论】:

  • 啊啊啊,我明白了。谢谢大家:)
【解决方案2】:

GetDiskFreeSpaceExA 不为其结果分配内存。

您需要有ULARGE_INTEGER 变量并将指针传递给它。

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2011-08-26
    • 2011-10-13
    • 2011-05-29
    • 2021-04-17
    • 2018-05-19
    相关资源
    最近更新 更多