gpt4 book ai didi

c++ - boost::filesystem 递归获取每个文件的大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:45 24 4
gpt4 key购买 nike

当参数是目录时,为什么这段代码会抛出错误?

使用 boost::recursive_directory_iterator 和使用 std::cout 语句,我可以看到它从不打印目录;只有文件。但是,当我尝试调用 boost::filesystem::file_size() 时,会抛出一个错误,基本上是说我正在尝试获取目录的文件大小。

错误(参数是"/home"):

terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): boost::filesystem::file_size: Operation not permitted: "/home/lost+found"
Aborted
#include <iostream>
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;

int main(int argc, char* argv[])
{
if (argc != 2) return -1;

const fs::path file{argv[1]};

if (!fs::exists(file)) return -1;

if (fs::is_regular_file(file))
std::cout << file << " [ " << fs::file_size(file) << " ]\n";

else if (fs::is_directory(file))
for (const fs::directory_entry& f : fs::recursive_directory_iterator{file})
std::cout << f.path().filename() << " [ " << fs::file_size(f.path()) << " ]\n";
}

编译:g++ -Wall -Wextra -pedantic-errors -std=c++14 -lboost_system -lboost_filesystem -O2 -Os -s test3.cpp -o test3

最佳答案

你得到的错误:

terminate called after throwing an instance of'boost::filesystem::filesystem_error' what():boost::filesystem::file_size: Operation not permitted:"/home/lost+found" Aborted

意思就是获取不到/home/lost+found的大小。通常,lost+found 是一个文件夹, file_size only get the size of regular files .

我知道循环不显示此文件夹的名称。可能是因为编译器正在评估 fs::file_size(f.path())并在调用 operator<< 之前抛出异常文件名,这样它就不会被打印出来。

我认为应该修改循环以在询问大小之前检查常规文件:

for (const fs::directory_entry& f : fs::recursive_directory_iterator(folder)) {
if (fs::is_regular_file(f.path())) {
std::cout << f.path().filename() << " [ " << fs::file_size(f.path()) << " ]\n";
}
}

关于c++ - boost::filesystem 递归获取每个文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169587/

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