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!