gpt4 book ai didi

c++ - boost 版本 1.54 boost::filesystem::directory_iterator,尝试使用 is_directory 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:59 26 4
gpt4 key购买 nike

使用 Linux OpenSUSE 12.3 32 位

我正在观看 Youtube 上 Bartosz Milewski 的 c++11 并发视频。在第 5 部分中,他在示例中使用了自己的 filesystem.h 文件,其中生成了多个线程来读取目录及其子目录中的所有文件。所以我决定使用 boost 的文件系统方法,因为我无权访问他的方法。我不知道如何在 directory_iterator 上调用 is_directory。

事实上,我似乎没有任何用于目录迭代器的常规方法。我正在使用从站点下载的 boost 版本 1.54 源代码。我也在使用 Qt Creator (2.8.1),它对 directory_iterator 的自动完成没有显示任何有用的功能。我已经使用 boost 来获取文件的 file_size(),所以我假设它已正确安装。我还查看了已弃用的内容,但似乎在 directory_iterator 上找不到任何内容。

我试过了

itr.is_directory
*itr.is_directory
boost::filesystem::is_directory(itr->status()) //doesn't have the member function status
boost::filesystem::is_directory(boost::filesystem::status(itr))
itr.status();
itr->status();

这是 Bartosz Milewski 示例中的代码(尚未完成)

test2.cpp

#include <iostream>
#include <string>
#include <thread>
#include <future>
#include <chrono>
#include <vector>
#include <boost/filesystem.hpp>
typedef std::vector<std::string> string_vector;
namespace fs=boost::filesystem;
string_vector listDirectory(std::string && dir)
{
string_vector listing;
std::string dirStr("\n> ");
dirStr += dir;
dirStr += ":\n";
listing.push_back(dirStr);

std::vector<std::future<string_vector>> futures;
for (fs::directory_iterator itr(dir); itr !=fs::directory_iterator(); ++itr)
{

如果(itr.is_directory); 这是我需要查找的目录

        {

}
else
{

}
}
return listing;
}

int main()
{
std::string root= "/home/craig/";
auto ftr = std::async(std::launch::async, &listDirectory, root);
try
{
string_vector listing = ftr.get();

}
}

auto-completion在Qt Creator中显示如下(括号内为auto complete)

itr-> [mref, operator ->,operator Reference *,proxy]

最佳答案

像这样尝试:

if (itr->status().type() == boost::filesystem::directory_file) {
// ...
}

关于c++ - boost 版本 1.54 boost::filesystem::directory_iterator,尝试使用 is_directory 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967067/

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