boost::filesystem Stackoverflow?



  • Hallo zusammen,

    hat von euch schon mal jemand beim iterieren durch das Filesystem mit boost::filesystem einen Stackoverflow verursacht/bekommen?

    Ich durchlaufe das Filesystem rekursiv mit einer Funktion und das verursacht mir bei den den 55 GB die ich durchsuche immer einen Stackoverflow.

    Hier mal etwas Code.

    void infoHandler::processDirectory(std::string& dir)
    {
    	fs::path full_path(dir, fs::no_check);
    
    	if ( fs::exists( full_path ) == false)
    	{
    		std::cout << "\nNot found: " << full_path.native_file_string() << std::endl;
    		return;
    	}
    
    	std::vector<std::string> dirs;
    	std::vector< fs::path >::const_iterator i;
    
    	bool isException = false;
    	if(fs::is_directory( full_path ) == true)
    	{
    		 std::cout << full_path.native_directory_string() << std::endl;
    		 fs::directory_iterator end_iter;
    
    		 for ( fs::directory_iterator dir_itr( full_path );
    		       dir_itr != end_iter;
    		       ++dir_itr )
    		 {
    			 if ( fs::is_directory( *dir_itr ) )
    	         {
    
    				 dirs.push_back((*dir_itr).string());
                 }
    
    		 }
    	}
    
    	std::vector<std::string>::iterator iter = dirs.begin();
    	while(iter != dirs.end())
    	{
    		processDirectory(*iter);
    		++iter;
    	}
    
    }
    

    Danke für die Hilfe...

    Und ach ja... :schland: rocks 😃



  • Hast du daran gedacht, "." und ".." rauszufiltern?



  • Nein, aber bei kleineren Datenmengen kommt er zum Ende.

    Macht boost::filesystem dass nicht selber?

    Gruß
    Tobi



  • Tobias Gerg schrieb:

    Macht boost::filesystem dass nicht selber?

    Doch, tut es.

    Passiert das immer beim selben Verzeichnis? Sind die Pfade besonders lang? Hast du eine Rekursion im Dateisystem, z.B. durch Links?



  • Nee, ist unterschiedlich. Aber ich glaub ich hab das Problem gefunden. Ich muss da auch dateien durchsuchen und die hab ich geöffnet aber nicht geschlossen... *schäm*

    Ich probier das nochmal aus...

    Trotzdem danke für die Mühen.

    Gruß
    Tobi



  • Hallo nochmal,

    die files waren nicht das Problem... So wie es aussieht sind es Zugriffsrechte... Hab das Problem gelöst, indem ich die Exception fange und zum nächsten Verzeichnis weitergehe...

    Gibts da ne andere Lösung... (Funktion zum Abfragen der Rechte ect. ) Hab in der Docu zu Boost 1.33.1 (eine neuere kann/darf ich noch nicht hernehmen) nichts gefunden...

    Gruß
    Tobi


Anmelden zum Antworten