CreateDirectory Probleme
-
Moin,
folgendes möchte ich Realisieren:
#include <iostream> #include <string> #include <Windows.h> #include <fstream> using namespace std; int main(void){ string name, kuerzel, age, funktion; string spath = "test\\"; // Ordner test bereits vorhanden fstream save; // Eingabe der Daten cout << "Name: "; getline(cin, name); cout << "Kuerzel: "; getline(cin, kuerzel); cout << "Alter: "; getline(cin, age); cout << "Funktion: "; getline(cin, funktion); // Ordner [kuerzel] in test\ erstellen // Abfrage ob der Ordner schon vorhanden ist // Ordner [kuerzel] schon vorhanden -> Abfrage: Überschreiben? (y/n) // Ordner [kuerzel] nicht vorhanden -> neu erstellen CreateDirectory(" ", NULL); // Daten in test[kuerzel]\ als .txt Datei abspeichern spath += kuerzel; spath += "\\"; spath += kuerzel; spath += ".txt"; save.open(spath.c_str(), ios::out|ios::trunc); if(save.is_open() != true){ cout << "\nFehler beim oeffnen der Datei!\n\n"; system("PAUSE"); exit(1); } save << "Name: " << name << endl << "Alter: " << age << endl << "Funktion: " << funktion << endl; save.close(); cout << "\nDatei wurde erfolgreich erstellt\n\n"; system("PAUSE"); return 0; }Nur stelle ich jetzt fest, das ich überhaupt keinen Plan habe wie ich das mit CreateDirectory verwirklichen kann. Dazu muss ich sagen, ich habe mit CreateDirectory noch nie gearbeitet...
-
http://www.boost.org/doc/libs/1_44_0/libs/filesystem/v2/doc/index.htm
Schöner zu benutzen und vor allem Platformunabhängig.
Kann ich nur empfehlen.
rya.
-
Und falls es doch nicht Boost sein soll, dann bist du im falschen Forum.
CreateDirectoryist eine WinAPI Funktion. Wie man sie benutzt, steht alles in der Dokumentation.Grüssli
-
Aber für so eine Mini-Funktionalität würde ich mir nicht den Brocken boost einbinden wollen.
Du kannst recht einfach prüfen, ob ein Ordner schon vorhanden ist:
typedef std::basic_string<TCHAR> string_type; // thx Unskilled bool DirExists(const string_type& name) { WIN32_FIND_DATA data; HANDLE hdl=FindFirstFile(name.c_str(),&data); if(hdl==INVALID_HANDLE_VALUE) return false; FindClose(hdl); return true; // es sollte egal sein, ob name eine Datei oder Verzeichnis ist }Das Problem ist nun, dass CreateDirectory mit bspw.
d:\1\2\3nur klappt, wennd:\1\2schon vorhanden ist.
Man kann sich deshalb so etwas zusammenschustern:bool CreateDirectory(const string_type& name) { return(::CreateDirectory(name.c_str(),0)!=0); } bool CreatePath(const string_type& name) { if(CreateDirectory(name)) return(true); size_t pos = name.rfind(TEXT("\\")); if(pos!=string_type::npos) { if(!CreatePath(name.substr(0,pos))) return false; return(CreateDirectory(name)); } return(false); }Es wird also rekursiv CreatePath aufgerufen, was bei der zu erwartenden geringen Anzahl kein Problem sein dürfte.
Jetzt sollte Folgendes klappen:bool CreateDir(const string_type& name) { if(!DirExists(name)) { if(!CreatePath(name)) return false; } return true; } bool f() { string_type str("d:\\"); str+="1\\"; str+="2\\"; str+="3\\"; str+="4\\"; str+="5\\"; str+="6"; return CreateDir(str); }
-
Wieso Brocken?
Es ist nur eine Library innerhalb des riesen Pakets. Und boost hat so gut wie jeder aufm Rechner der C++ programmiert^^.
Und das sage ich als jemand der boost nur sehr selten empfiehlt. Aber in dem Fall zurecht.
rya.
-
Davon abgesehen das CreateDirectory nicht in das ANSI C++ Unterforum gehört, es gibt ein eigenes Unterforum für die WindowsAPI.
-
Blacky666 schrieb:
// Abfrage ob der Ordner schon vorhanden ist // .. CreateDirectory(" ", NULL);..ich habe mit CreateDirectory noch nie gearbeitet...
Zwei ganz einfache Probleme.
Scorcher24 schrieb:
<Boostempfehlung>rya.
Okay, es ist nur eine kleine Bibiothek, aber sollte man sich, wenn man programmiert, nicht mit diesen einfachen Konzepten vertraut machen?
Dravere schrieb:
..
CreateDirectoryist eine WinAPI Funktion. Wie man sie benutzt, steht alles in der Dokumentation.Dass ein Link zur MSDN-Dokumentation nicht unbedingt zum Ziel führt, dürfte nach Codeansicht auch klar sein...
asc schrieb:
Davon abgesehen das CreateDirectory nicht in das ANSI C++ Unterforum gehört, es gibt ein eigenes Unterforum für die WindowsAPI.
Ja und jetzt?
-
Danke für euere Hilfe. Jetzt muss ich erstmal durch die ganzen Codes durcharbeiten, sodas ich diese erstmal richtig verstehe.
