【发布时间】:2012-09-25 23:35:41
【问题描述】:
我正在使用以下内容递归地遍历目录中的所有文件:
try
{
for ( bf::recursive_directory_iterator end, dir("./");
dir != end; ++dir )
{
const bf::path &p = dir->path();
if(bf::is_regular_file(p))
{
std::cout << "File found: " << p.string() << std::endl;
}
}
} catch (const bf::filesystem_error& ex) {
std::cerr << ex.what() << '\n';
}
但这包括隐藏文件和隐藏目录中的文件。
如何过滤掉这些文件?如果需要,我可以将自己限制在隐藏文件和目录以“。”开头的平台上。字符。
【问题讨论】:
-
这适用于隐藏文件,但是排除所有存在于隐藏子目录(例如“.svn”)中的非隐藏文件呢?我想我需要检查路径的每个组件是否有初始“。”或类似的东西(也正确处理“../”组件等)。如果 Boost 中存在跨平台的东西,我宁愿使用它,尽管我无法在文档中找到它。
-
你对“隐藏文件”的定义是什么?
-
@Code-Guru 好问题!如果有一个很好的跨平台定义,我会使用它,只要它在类 Unix 平台上做正确的事情(以“.”开头的文件/目录被隐藏)。也许没有什么好的方法可以抽象出各种隐藏的概念。 Wikipedia 对常见平台上“隐藏”的含义进行了合理的描述。目前我只关心类 Unix 平台,但我喜欢尽可能跨平台。
-
@Soverman: (.svn:) 如果一切都隐藏在那里,你为什么要遍历它? ://
-
@KarolyHorvath 只是因为我还没想出如何用 dir.no_push() 跳过它!
标签: c++ boost boost-filesystem hidden-files