Boost::Filesystem will nicht



  • Hallo,

    ich habe mir eine Funktion gebastelt, die mir alle DLLs in einem angegebenen Verzeichnis auflisten soll. Um portabel zu bleiben, hab ich mich für Boost::Filesystem entschieden:

    unsigned int otfw::DynLibLoader::EnumDynLibs(otfw::DynLibEnumeration &target, const std::string format, const std::string &pathname , bool scansubdirs)
    {
    	path libpath(pathname);
    	unsigned int counter = 0;
    
    	if(!exists(libpath))
    		return 0;
    
    	if(!is_directory(libpath))
    		return 0;
    
    	for(path::iterator current_file = libpath.begin(); current_file != libpath.end(); current_file++)
    	{
    		if(is_directory(*current_file))
    		{
    			//scan recursively in subdirectories
    			if(scansubdirs)
    				counter += EnumDynLibs(target, format, *current_file, true);
    		}
    		else
    		{
    			std::string file_ext = current_file->substr(current_file->length() - 4, current_file->length());	
    			if(file_ext == ".dll")
    			{
    				target.push_back(*current_file);
    			}
    		}
    
    	}
    
    	return counter;
    }
    

    Das Problem: Egal welches Verzeichnis ich übergebe, jedes mal gibt exists() bzw. is_directory() false zurück, egal was ich angebe ("./",".","./foo", "foo", "c:/spiele/",...)
    Gibt es irgendwas, dass ich nicht beachtet habe?
    Ich benutze MS Visual-C++ Express auf WinXP Sp2 mit den Boost-Libraries von Boost-Consulting

    Danke schonmal...

    Martin



  • Welche Boost-Version benutzt du denn?



  • backslash escapen



  • Ich benutze Boost 1.34
    Backslashes benutze ich garnicht, lt. Doku sollten auch Slashes funktionieren...
    Hab's auch mit Backslashes "C:\\Spiele" probiert, funktioniert aber auch nicht 😞

    EDIT: Hab gerade gesehen, dass Backslashes im Konstruktor für path in Slashes umgewandelt werden...

    EDIT2: Exception wird auch nicht geworfen



  • OK, ich hab das Problem scheinbar gelöst, indem ich gegen eine DLL-Version von Boost::Filesystem gelinkt habe...
    Kann mir jemand erklären was die verschiedenen Bibliotheken im Boost Verzeichnis bedeuten?

    - boost_filesystem-vc80-mt-1_34_1.lib (DLL?)
    - boost_filesystem-vc80-mt-gd-1_34_1.lib (DLL, Debug?)
    - libboost_filesystem-vc80-mt-1_34_1.lib (statisch?)
    - libboost_filesystem-vc80-mt-gd-1_34_1.lib (statisch, Debug?)



  • http://www.boost.org/more/getting_started/windows.html#library-naming

    Die Doku is da eigentlich sehr brauchbar...



  • Danke, das hab ich nicht gefunden...
    Die Doku, naja, ist zwar sehr vollständig und umfangreich aber leider nicht besonders übersichtlich und manchmal ziemlich kryptisch...

    GRüße,

    Martin


Anmelden zum Antworten