boost filesystem
-
wie kann ich mit boost filesystem eine filesystem struktur - baum erzeugen?
bis zu einer tiefe von 5, mit jeweils 4 aesten...zb \Projects\root / \ \ \ / \ \ \ / \ \ foo_14 foo_11 foo_12 foo_13 / \ / \ / \ foo_21 / / / foo_31cu
-
ich hab probleme mit der rekusion...scheint ne endlosschleife zu sein...
void createDirectory(const string &dir_name) { fs::path dir_path(dir_name, fs::native); cout << "createDirectory " << dir_path.string() << endl; fs::create_directory( dir_path ); } int createTree(const string &path_current) { static int depth_curr = 0; depth_curr++; if(depth_curr < 5) { for(unsigned int i = 0; i < 4; i++) { createDirectory(path_current + "/foo"); } typedef fs::directory_iterator dit; dit di_end; for (dit it = dit(p); it != di_end; ++it) { // subdirectory if( fs::is_directory( *it ) ) { createTree( (*it).string() ); } } } else { return depth_curr--; } }
-
void createDirectory(const string &dir_name) { fs::path dir_path(dir_name, fs::native); cout << "createDirectory " << dir_path.string() << endl; fs::create_directory( dir_path ); } int createTree(const string &path_current) { static int depth_curr = 0; depth_curr++; if(depth_curr < 6) { for(unsigned int i = 0; i < 5; i++) { stringstream s; s << i; createDirectory(path_current + "/foo" + s.str()); } typedef fs::directory_iterator dit; dit di_end; fs::path p(path_current, fs::native); for (dit it = dit(p); it != di_end; ++it) { // subdirectory if( fs::is_directory( *it ) ) { depth_curr = createTree( (*it).string() ); } } } else { return depth_curr--; } }folgender code erstellt mir nur folgende struktur:
createDirectory c:/test_dir/foo1 createDirectory c:/test_dir/foo2 createDirectory c:/test_dir/foo3 createDirectory c:/test_dir/foo4 createDirectory c:/test_dir/foo0/foo0 createDirectory c:/test_dir/foo0/foo1 createDirectory c:/test_dir/foo0/foo2 createDirectory c:/test_dir/foo0/foo3 createDirectory c:/test_dir/foo0/foo4 createDirectory c:/test_dir/foo0/foo0/foo0 createDirectory c:/test_dir/foo0/foo0/foo1 createDirectory c:/test_dir/foo0/foo0/foo2 createDirectory c:/test_dir/foo0/foo0/foo3 createDirectory c:/test_dir/foo0/foo0/foo4 createDirectory c:/test_dir/foo0/foo0/foo0/foo0 createDirectory c:/test_dir/foo0/foo0/foo0/foo1 createDirectory c:/test_dir/foo0/foo0/foo0/foo2 createDirectory c:/test_dir/foo0/foo0/foo0/foo3 createDirectory c:/test_dir/foo0/foo0/foo0/foo4 createDirectory c:/test_dir/foo0/foo0/foo0/foo0/foo0 createDirectory c:/test_dir/foo0/foo0/foo0/foo0/foo1 createDirectory c:/test_dir/foo0/foo0/foo0/foo0/foo2 createDirectory c:/test_dir/foo0/foo0/foo0/foo0/foo3 createDirectory c:/test_dir/foo0/foo0/foo0/foo0/foo4
-
Ersetze doch bitte "depth_curr" duch ein Parameter, dann sollte auch automatisch der dumme Fehler (du decrementierst depth_curr nicht wenn du den "if" Zweig nimmst) verschwinden.
Also so inetwa...
void foo(int levels_to_recurse) { make_foo_stuff(); if(levels_to_recurse > 0) foo(levels_to_recurse - 1); }