Verzeichnis erstellen...



  • Hallo, bin immer noch der absolute c++-neuling.
    Wie kann ich m.H.v. ein C++ Verzeichnis unter einem bestimmten Pfad erstellen? Allerdings nur wenn dieses bislang noch nicht existiert. Andernfalls soll das alte NICHT überschrieben werden.

    Danke schonmal für eure Antworten. Echt super Forum.



  • Das Erstellen von Verzeichnissen ist nicht Teil der ISO C++ Spezifikation. Dazu muß man auf Funktionalitäten des Betriebssystems oder einer darüberliegenden Bibliothek zurückgreifen. Hier ein Beispiel mit Boost Filesystem:

    #include <boost/filesystem/operations.hpp>
    using boost::filesystem;
    
    void create_dir(path const & p)
    {
            if (!exists(p))
                    create_directory(p);
    }
    


  • du kannst auch

    _mkdir("C:/ordner");
    

    verwenden



  • Bei boost::filesystem ist anzumerken, dass create_directory nur Verzeichnisse erstellt, deren Parent-Directories existieren. Ein möglicher Workaround könnte so aussehen:

    #include <stack>
    #include <iostream>
    
    #include <boost/filesystem/path.hpp>
    #include <boost/filesystem/operations.hpp>
    
    #include <conio.h>
    
    using namespace std;
    using namespace boost;
    using namespace boost::filesystem;
    
    bool create_directory_recursiv( path & directory ) throw( ... ) { 
    
        static stack< path > sub_directories;
    
        if( !directory.has_root_directory( ) ) {
    
            cout << "jup!" << endl;
            directory = initial_path( ) / directory;
    
        }
    
        if( !exists( directory ) ) {
    
            sub_directories.push( directory.branch_path( ) );
            return create_directory_recursiv( sub_directories.top( ) );
        }
    
        while( !sub_directories.empty( ) ) {
    
            if( !exists( sub_directories.top( ) ) ) {
    
                if( !create_directory( sub_directories.top( ) ) ) {
    
                    do {
    
                        sub_directories.pop( );
    
                    } while( !sub_directories.empty( ) );
    
                    return false;
                }
    
            }
    
            sub_directories.pop( );
        }
    
        return true;
    }
    
    int main( )
    {
        cout << "Working directory: " << initial_path( ).string( ) << endl;
    
        path directory( "C:/foo/bar", native );
    
        try {
    
            if( !create_directory_recursiv( directory ) ) {
    
                throw( directory.string( ) + " could not be created!" );
            }
    
        } catch( exception &e ) {
    
            cout << e.what( ) << endl;
        }
    }
    

    Greetz, Swordfish



  • oder man verwendet create_directories() aus der convenience.hpp .



  • Hierzu mal eine ergänzende Frage:

    Wie kann man in einem Ordner festellen ob dieser leer ist?



  • Du zählst durch, wieviele Dateien du in diesem Verzeichnis findest - wenn du 0 rausbekommst, ist es leer.

    (ich kenne Boost::Filesystem nicht im Detail, aber bestimmt bietet es auch Funktionen für diesen Zweck an)



  • Ich würde das Ganze unter Linux machen wollen.
    Ich müsste erst festellen können, ob der Ordner home/sowiso existiert und dann die Ausgabe machen ob der Ordner Dateien enthält.
    So eine Funktion wie exists habe ich auch nicht gefunden. Gibts da irgendwo eine Referenz?



  • Dann schau dir mal die Dokumentation von Boost::Filesystem an - exists() sagt dir, ob das Verzeichnis existiert, is_empty(), ob etwas drin steht.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke, sowas habe ich gesucht!


Log in to reply