boost::filesystem::space() 报告磁盘空间错误
boost::filesystem::space() is reporting wrong diskspace
我的驱动器 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
两者都返回相同的数字。
使用 boost::filesystem::space(p).free
需要的类型。它可能需要 64 位整数类型:
uintmax_t freeSpace = boost::filesystem::space(p).free;
用auto
也不错
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:
上有 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:
上使用 mingwg++ (i686-posix-dwarf-rev2, Built by MinGW-W64 project) 7.1.0
我还尝试使用 MXE 从 Linux:
交叉编译i686-w64-mingw32.static-g++ (GCC) 5.5.0
两者都返回相同的数字。
使用 boost::filesystem::space(p).free
需要的类型。它可能需要 64 位整数类型:
uintmax_t freeSpace = boost::filesystem::space(p).free;
用auto
也不错
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
.