Linux OpenSUSE 12.3 32 ビットの使用
YouTube で Bartosz Milewski の c++11 同時実行ビデオを見ています。パート 5 では、ディレクトリとそのサブディレクトリ内のすべてのファイルを読み取るために複数のスレッドが生成される例で、彼は独自の filesystem.h ファイルを使用します。それで、boost のファイルシステム メソッドにアクセスできないので、boost のファイル システム メソッドを使用することにしました。directory_iterator で is_directory を呼び出す方法がわかりません。
実際、ディレクトリ反復子の通常のメソッドはないようです。サイトからダウンロードしたブースト バージョン 1.54 のソースを使用しています。Qt Creator (2.8.1) も使用していますが、directory_iterator のオートコンプリートには便利な機能が表示されません。ファイルの file_size() を取得するためにboostを使用したので、正しくインストールされたと思います。また、廃止されたものも調べましたが、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)
{
if (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();
}
}
オートコンプリートは、Qt Creator で次のように表示されます (括弧内はオートコンプリート)
itr-> [mref, operator ->,operator Reference *,proxy]