gpt4 book ai didi

c++ - boost::filesystem::space() 报告错误的磁盘空间

转载 作者:可可西里 更新时间:2023-11-01 11:15:20 26 4
gpt4 key购买 nike

我在驱动器 C: 上有 430 GB 的空闲空间。但是对于这个程序:

#include <iostream>
#include <boost/filesystem.hpp>

int main()
{
boost::filesystem::path p("C:");

std::size_t freeSpace = boost::filesystem::space(p).free;
std::cout<<freeSpace << " Bytes" <<std::endl;
std::cout<<freeSpace / (1 << 20) << " MB"<<std::endl;

std::size_t availableSpace = boost::filesystem::space(p).available;
std::cout << availableSpace << " Bytes" <<std::endl;
std::cout << availableSpace / (1 << 20) << " MB"<<std::endl;

std::size_t totalSpace = boost::filesystem::space(p).capacity;
std::cout << totalSpace << " Bytes" <<std::endl;
std::cout << totalSpace / (1 << 20) << " MB"<<std::endl;

return 0;
}

输出是:

2542768128 Bytes
2424 MB
2542768128 Bytes
2424 MB
2830102528 Bytes
2698 MB

我需要知道有多少磁盘空间可用,因为我的应用程序必须下载一个巨大的文件,我需要知道下载它是否可行。

我在 Windows 上使用 mingw:

g++ (i686-posix-dwarf-rev2, Built by MinGW-W64 project) 7.1.0

我还尝试使用 MXE 从 Linux 交叉编译:

i686-w64-mingw32.static-g++ (GCC) 5.5.0

两者都返回相同的数字。

最佳答案

std::size_t 不保证是最大的标准无符号类型。实际上,它很少。

boost::filesystem defines space_info thus :

struct space_info  // returned by space function
{
uintmax_t capacity;
uintmax_t free;
uintmax_t available; // free space available to a non-privileged process
};

您可以通过使用 auto 轻松避免错误,这很自然,因为确切的类型并不重要。几乎总是只有不匹配会造成伤害,因此 Almost Always auto .

关于c++ - boost::filesystem::space() 报告错误的磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com