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_31
    

    cu



  • 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);
    }
    

Anmelden zum Antworten