27 Kasım 2017 Pazartesi

filesystem recursive_directory_iterator Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/filesystem.hpp>
Bu sınıfın kullanımında bir sıkıntı var. Dizinleri dolaşırken eğer bir dizin okuma hakkı vermiyorsa exception fırlatıyor.

Constructor
Şöyle yaparız.
path 
dirPath = ...;
recursive_directory_iterator dirBegin (dirPath);
recursive_directory_iterator dirEnd;
no_push metodu
Şöyle yaparız.
path dir_path = ...;

const recursive_directory_iterator dirEnd;
recursive_directory_iteratorr curEntry (dir_path);
while (curEntry != dirEnd){
  if (curEntry->path().filename() == L"system32")
  {
    curEntry.no_push();
  }
  else
  {
    ...
  }
  ++CurEntry;    
}
Döngü İçinde Kullanmak - C++98
Şöyle yaparız.
for (; dirBegin != dirEnd; ++dirBegin) {
  path currentPath = *dirBegin;
  ...
}
Döngü İçinde Kullanmak - C++11
Elimizde şöyle bir kod olsun.
using namespace boost::filesystem;    
struct recursive_directory_range
{
  typedef recursive_directory_iterator iterator;
  recursive_directory_range(path p) : p_(p) {}

  iterator begin() { return recursive_directory_iterator(p_); }
  iterator end() { return recursive_directory_iterator(); }

  path p_;
};
Şöyle yaparız.
for (auto it : recursive_directory_range(dir_path))
{
  std::cout << it << std::endl;
}
Vector'ü Doldurmak - C++11
Şöyle yaparız.
std::vector<fs::path> paths { fs::recursive_directory_iterator {"..." }, {} };

Hiç yorum yok:

Yorum Gönder