您可以使用 boost::filesystem 和 BOOST_FOREACH 遍历目录中的所有文件吗?我试过
path dirPath = ...
int fileCount = 0;
BOOST_FOREACH(const path& filePath, dirPath)
if(is_regular_file(filePath))
++fileCount;
此代码编译、运行,但不会产生所需的结果。
您可以使用 boost::filesystem 和 BOOST_FOREACH 遍历目录中的所有文件吗?我试过
path dirPath = ...
int fileCount = 0;
BOOST_FOREACH(const path& filePath, dirPath)
if(is_regular_file(filePath))
++fileCount;
此代码编译、运行,但不会产生所需的结果。
您可以使用以下方式迭代目录中的文件BOOST_FOREACH
:
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
namespace fs = boost::filesystem;
fs::path targetDir("/tmp");
fs::directory_iterator it(targetDir), eod;
BOOST_FOREACH(fs::path const &p, std::make_pair(it, eod))
{
if(fs::is_regular_file(p))
{
// do something with p
}
}
所以我猜我错过了这艘船,但即使我找到了理论上应该工作的代码,我也遇到了类似的问题。问题是 boost::filesystem::path 数据类型从字符串中取出最后一个字符。
我正在从一个文件中读取,我的路径是“c:\one\two\three”。但是当我将其设为路径数据类型时,字符串更改为“c:\one\two\thre”。不知道那是什么,但由于这个原因,找不到文件位置,等等等等。我所做的修复它只是在末尾添加另一个'\'。这样它会删除“\”而不是“e”。
在那之后工作得很好。但如前所述,我不知道它为什么这样做。希望这可以帮助某人。
你dirPath
要么不是一个序列,要么它的序列大小为 1。
http://www.boost.org/doc/libs/1_48_0/doc/html/foreach.html
BOOST_FOREACH 迭代序列。但究竟什么才是序列?由于 BOOST_FOREACH 建立在 Boost.Range 之上,它会自动支持 Boost.Range 识别为序列的那些类型。具体来说,BOOST_FOREACH 适用于满足单程范围概念的类型。例如,我们可以将 BOOST_FOREACH 用于:
注意
对 STL 容器的支持非常普遍;任何看起来像 STL 容器的东西都很重要。如果它具有嵌套的 iterator 和 const_iterator 类型以及 begin() 和 end() 成员函数,BOOST_FOREACH 将自动知道如何对其进行迭代。正是通过这种方式 boost::iterator_range<> 和 boost::sub_range<> 与 BOOST_FOREACH 一起工作。