CreateDirectory
-
Hallo,
vielleicht kann mir jemand helfen. Ich habe folgenden Code:
String neuerpfad = Label3->Caption + "\\neuer-ordner"; CreateDirectory (neuerpfad.c_str(),NULL);
In Label3 steht ne Pfadangabe.
Nur leider passiert nichts.-Kaljinka-
-
Auszug aus der Hilfe:
"Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError. "Also: Was sagt GetLastError?
-
Ja, des wollt ich auch schon versuchen, aber bei
GetLastError;
passiert nix. Wie ruf ich denn des richtig auf?
-Kaljinka-
-
Ich glaub, ich hab's. Der Fehler ist "1111011". Leider kann ich damit auch nix anfangen. Jemand von euch vielleicht???
-Kaljinka-
-
Du musst dir unbedingt angewöhnen, die Hilfe jeweils bis zum Ende zu lesen. Aus der Hilfe zu GetLastError:
To obtain an error string for operating system error codes, use the FormatMessage function. For a complete list of error codes, see the WINNT.H header file in the Win32 SDK.
Und das das alles WinAPI-Sachen sind verschieben wir das Ganze fix in's WInAPI-Forum.
-
Also laut SysErrorMessage lautet der Fehler im Klartext
"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch". Könnte das daran liegen, dass der Pfad in Label3 ohne Doppel-Backslash angegeben ist?Gruß,
-Kaljinka-
-
Kaljinka schrieb:
Also laut SysErrorMessage lautet der Fehler im Klartext
"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch". Könnte das daran liegen, dass der Pfad in Label3 ohne Doppel-Backslash angegeben ist?Aber eigentlich sagt die Fehlermeldung doch schon alles oder? Exioistiert der Pfad bis zum anzulegenden Ordner? Eine Verzeichnisstruktur läßt sich mit CreateDirectory nämlich nicht anlegen.
Dann mach doch einfach mal: "c:\\test"
-
Nachdem alles prima klappt, wenn ich den Pfad direkt in den Quelltext schreib, müsste er eigentlich existieren. Ich denke, es liegt wirklich an dem Doppel-Backslash, nur schaff ich es nicht, aus einem einfachen einen doppelten zu machen.
-Kaljinka-
-
Hi,
Eigentlich verstehe ich nicht ganz, warum das nicht klappt, aber um aus einem einfachen einen doppelten Backslash zu machen kannst du folgenden Code verwenden. Ist zwar mal wieder sicher nicht die Optimallösung, aber für so einen kurzen String ist das sicher keine Performancebremse
AnsiString asPfad = ""; for (int i = 1; i <= Label1->Caption.Length(); i++) { if (Label1->Caption[i] == '\\') { asPfad += AnsiString('\\') + Label1->Caption[i]; } else { asPfad += Label1->Caption[i]; } }
Ps. Da du den Borland Builder benutzt hab ich für den Pfad AnsiString benutzt.
Edit:
Na ich bin ja bescheuert: Machs doch einfach mitStringReplace(...);
-
Kaljinka schrieb:
Ich denke, es liegt wirklich an dem Doppel-Backslash, nur schaff ich es nicht, aus einem einfachen einen doppelten zu machen.
Du brauchst (und darfst) aus dem einfachen Backslash in Variablen keinen doppelten machen, dafür sorgen die verschiedenen String-Klassen (hier AnsiString) selbst. Der doppelte Backslash ist nur dann erforderlich, wenn du eine Pfadangabe direkt im Quelltext zu stehen hast.
Siehe auch die BCB-FAQ unter "AnsiString".
-
Hallo,
danke für eure Hilfe.
Das Problem war, dass der Pfadname im Label3 immer von DirectoryListBox abgekürzt wurde (c:\...\Eigene Dateien). Aber jetzt hab ich das Problem, dass, wenn ich Dateien in das neue Verzeichnis kopieren will, die Meldung "Zugriff verweigert" kommt. Warum wird der Zugriff verweigert?-Kaljinka-
-
Kaljinka schrieb:
Ich habe folgenden Code:
String neuerpfad = Label3->Caption + "\\neuer-ordner"; CreateDirectory (neuerpfad.c_str(),NULL);
Das könnte an den NULL liegen, das du bei CreateDirectory eingesetzt hast.
Setz das einfach mal auf true oder false (wenn ich das jetzt richtig in Erinnerung habe).Wenn das nicht geht schlage ich vor, einfach mal den Quellcode hier reinzuposten.
Schönen Abend noch
Bl@ckbird
-
Hallo,
mit TRUE oder FALSE krieg ich folgende Fehlermeldungen:
Cannot convert 'int' to '_SECURITY_ATTRIBUTES*' und Type mismatch in parameter 'IpSecurityAttributes' in call to '__stdcall CreateDirectoryA(const char ,_SECURITY_ATTRIBUTES)'Sind die SecurityAttributes nicht vielleicht irgendwo aufgeführt?
Mein Code schaut so aus:
String alterpfad = "A:\\ordner"; String neuerpfad = Label3->Caption + "\\neuerordner\\"; CreateDirectory (neuerpfad.c_str(),NULL); CopyFile (alterpfad.c_str(), neuerpfad.c_str(), true);
-Kaljinka-
-
Uups, hab das "Problem" gelöst. Ich hab vergessen, den Dateinamen anzugeben!!
Naja. Danke an alle, die versucht haben mir zu helfen! (Auf so was kommt man ja nicht!)
-Kaljinka-
-
Hallo zusammen ,
kann mir jemand weiterhelfen.
Ich möchte mir das aktuelle Verzeichnis in dem mein Prog sich gerade befindet
zurückgeben lassen.Ich arbeite mit der MFC aber da es sich um eine Win-API funtion handeln muss suche ich bei euch eine Antwort.
mfg
CC
-
das könnte dir vielleicht helfen:
char pathwithfilename[500]; //wie groß der pfad eben werden könnte GetModuleFileName(NULL, pathwithfilename, sizeof(pathwithfilename));
mfg