gpt4 book ai didi

c++ - 在 Boost 文件系统中过滤文件夹

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:14 27 4
gpt4 key购买 nike

我想在 Windows 中使用 Boost Filesystem 获取具体文件夹(在本例中为 Documents)中的所有文件。

为此,我制作了一个过滤器以确保没有文件夹。

问题是当我仍然得到以下文件夹时:

"C:\....\Documents\My Videos", 
"C:\....\Documents\My Music",
"C:\....\Documents\My Pictures"

(我没有得到其他一些文件夹)

代码如下:

boost::filesystem::directory_iterator end;
for (boost::filesystem::directory_iterator iter(documentsFolder); iter != end; ++iter){
if (!is_directory(*iter)){
std::cout << iter->path() << "\n";
}
else{
std::cout << "-------->>>" << iter->path() << "\n";
}

有没有办法在不进行手动过滤的情况下避免使用这些文件夹?

非常感谢!

最佳答案

这些可能是路口。

我只是通过使用 junction.exe(来自 sysinternals)来创建一个连接点,并使用这个小测试程序来查明它们:

#include <boost/range/iterator_range.hpp>
#include <boost/filesystem.hpp>
#include <vector>
#include <string>
#include <iostream>

int main(int argc, char* argv[])
{
using namespace boost::filesystem;
std::vector<std::string> args(argv+1, argv+argc);
if (args.empty()) args.push_back("C:\\WORK");

for (auto dir : args)
{
recursive_directory_iterator f(dir), l;
for (directory_entry& entry : boost::make_iterator_range(f,l))
{
if (is_other(entry))
{
assert(!is_regular_file(entry));
assert(!is_directory(entry));
std::cout << entry << "\n";
}
}
}
}

现在运行它并打印 test.exe "C:\WORK"

"C:\WORK\MyJunction"

请注意,assers 证明既不是常规文件也不是目录


在稍微不相关的新闻中,这对于目录迭代来说相当不错:

int main(int argc, char* argv[])
{
using namespace boost::adaptors;

std::vector<std::string> const args(argv+1, argv+argc);

for (auto& dir : args)
for (auto& entry : traverse_directory(dir) | filtered(is_valid_file))
std::cout << entry << "\n";
}

使用这些相当简单的助手:

template <typename T>
boost::iterator_range<boost::filesystem::recursive_directory_iterator> traverse_directory(T const& dir) {
boost::filesystem::recursive_directory_iterator f(dir), l;
return boost::make_iterator_range(f, l);
}

static bool is_valid_file(boost::filesystem::directory_entry const& entry) {
return is_regular_file(entry) && !is_other(entry);
}

查看 Live on Coliru

关于c++ - 在 Boost 文件系统中过滤文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547921/

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