正在筛选Boost文件系统中的文件夹
Filtering folders in Boost Filesystem
我想在Windows中使用Boost Filesystem获取具体文件夹(在本例中为Documents)中的所有文件。
为此,我做了一个过滤器,以确保我没有文件夹。
问题是,当我仍然得到以下文件夹:
"C:....DocumentsMy Videos",
"C:....DocumentsMy Music",
"C:....DocumentsMy 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";
}
有没有什么方法可以在不进行手动筛选的情况下避免这些文件夹?
非常感谢!
这些可能是交叉点。
我只是在一个windows盒子上尝试了一下,使用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:WORKMyJunction"
注意,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);
}
看到它在Coliru上直播
相关文章:
- 如何将更多文件夹添加到c++include路径
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在文档文件夹中创建目录
- "assimp/config.h"找不到,但它在文件夹中
- C++入门 5 版:类消息和文件夹
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- 对单元测试(googletest)和项目/文件夹/文件的混淆
- 正在筛选Boost文件系统中的文件夹
- 卸载程序不会删除复制到VS2010安装程序项目中的系统文件夹。
- 为什么必须在 Linux 系统上"installed" uuid.h 才能构建许多C++程序,而不仅仅是放入 include 或 lib 文件夹
- C++/CLI:文件系统观察器移动或复制非空文件夹
- 在 C++ 中使用 Linux 系统调用以及文件和文件夹管理
- 如何使用C/C++以编程方式检查窗口中的系统文件夹
- 设计文件夹/文件系统
- 如何在Unix和windows中获取系统或用户临时文件夹
- 如何使用c++获得文件夹/目录名称,但不是一个文件的路径?尤其是提高:文件系统;