Seite 1 von 1
Ordner anlegen
Verfasst: 23.02.2005 23:17
von zimmi
Hallo,
ich benötige Hilfe bei folgendem Code:
Code: Alles auswählen
Zielordner$ = "C:\Dokumente und Einstellungen\Markus\" + FormatDate("%yyyy%mm%dd", Date())
InitialPath$="C:\"
Path$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$)
If Path$
MessageRequester("Information", "Sie haben folgenden Pfad ausgewählt:"+Chr(10)+Path$, 0)
Ergebnis = CopyDirectory(Path$, Zielordner$,"", #PB_FileSystem_Recursive)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
Probleme habe ich mit der ersten Zeile: Zielordner$.
So, wie die Zeile jetzt angegeben ist, wird der Ordner (in diesem Fall Tagesdatum) angelegt.
Wenn ich jetzt aber die Zeile mit OE_BACKUP erweitere (also: Zielordner$ = "C:\Dokumente und Einstellungen\Markus\OE_BACKUP" + FormatDate("%yyyy%mm%dd", Date()) ), dann wird kein Ordner angelegt.
Ich weiß nicht warum. Ich finde die Gesetzmäßigkeit einfach nicht.
Kann mir bitte jemand auf die Srünge helfen?
Vielen Dank.
Gruß.
Markus
Edit by NicTheQuick: Code-Tags gesetzt
Verfasst: 23.02.2005 23:45
von NicTheQuick
Das ist tatsächlich ein merkwürdiger Fehler. Wahrscheinlich sogar ein Bug in PB.
Aber versuch mal nach dem Ordnernamen noch einen Backslash zu schreiben, also: [c]Zielordner$ = "C:\Dokumente und Einstellungen\Markus\OE_BACKUP" + FormatDate("%yyyy%mm%dd", Date()) + "\"[/c]
Ich habe es aber nicht ausprobiert.
Verfasst: 24.02.2005 00:10
von Ynnus
Hui, das gibt eine nette endlosschleife wenn man als Ziel und Quelle den selben Ordner aussucht und dieser noch Unterordner hat.

Ordner anlegen
Verfasst: 24.02.2005 00:12
von zimmi
Hallo,
danke für die schnelle Antwort.
So wird der Ordner schon angelegt. Musste aber festellen, dass ich in meinem Beitrag das Problem nicht richtig beschrieben habe:
Ich möchte, dass der Ordner ....\OE_BACKUP\ + Tagesdatum angelegt wird.
Wenn ich nach OE_Backup den Backslash weglasse, dann wird der Ordner angelegt. Setze ich nach dem OE_BACKUP aber einen Backslash, dann wird der Odner nicht angelegt.
Muss also irgendwie am Backslash liegen. Aber, warum? Und, wie kann ich das Problem umgehen?
Jedesmal, wenn ich das Programm aufrufe, soll im Verzeichnis ....\OE_BACKUP ein Unterordner als Tagesdatum angelegt werden.
Sorry, für meine erste, schlechte Ausführung. Ich hoffe, jetzt habe ich mein Problem besser erklären können.
Grüße.
Markus
Verfasst: 24.02.2005 00:29
von NicTheQuick
Existiert der Ordner
OE_BACKUP schon oder erwartest du, dass er erstellt wird? Wenn der Ordner schon existieren sollte, weiß ich nicht, wo das Problem liegt. Im anderen Fall glaube ich, dass der Kopierbefehl höchstens einen nicht-existierenden Ordner anlegt, aber nicht zwei miteinander verschachtelte.
Wenn du verstehst, was ich meine.
Du müsstest also dann schon vorher prüfen, ob der Ordner
OE_BACKUP existiert. Wenn nicht, musst du ihn anlegen. Und erst dann kannst du mit dem Kopieren beginnen.
Sorry, für die vielen Ideen, aber ich bin gerade zu faul um das selbst auszutesten.

Verfasst: 24.02.2005 00:31
von Team100
@zimmi
Ich hatte das Problem schon mal. Sowohl das CopyDirectory als auch
das verwandte CreateDirectory können immer nur <ein> neues
Diectory anlegen (egal ob mit Backslash oder nicht - besser man schreibt ihn dazu).
Wenn du also .... markus\OE_BACKUP20050223\ als Ausdruck hast,
dann wird es angelegt, weil ...\markus\ schon existiert.
.... markus\OE_BACKUP\20050223\ wird nicht angelegt, da der Befehl
2 Unterverzeichnisse anlegen müßte und das tut er nicht.
Abhilfe: Jedes Unterverzeichnis einzeln vorab mit CreateDirectory() anlegen.
(Das sollte in der Hilfe nachgebessert werden oder der Befehl sollte fürs
Anlegen von mehreren Directorys verbessert werden)
Cu von Team100
Verfasst: 24.02.2005 00:45
von ts-soft
Um mehrere Verzeichnisse in einem Rutsch zu erstellen gibts in Win2k und höher ne API-Funktione: MakeSureDirectoryPathExists ,
Außerdem kann man noch folgenden Funktion von IB-Software nutzen:
Code: Alles auswählen
Procedure ForceDirectories(Directory.s)
If Len(Directory) > 0
If (Right(Directory, 1) = "\")
Directory = Left(Directory, Len(Directory) -1)
EndIf
If (Len(Directory) < 3) Or FileSize(Directory) = -2 Or GetPathPart(Directory) = Directory
ProcedureReturn #False
EndIf
ForceDirectories(GetPathPart(Directory))
CreateDirectory(Directory)
ProcedureReturn #True
EndIf
EndProcedure
[Edit]Nachtrag: hier der link zum Original Thread:
http://robsite.de/php/pureboard-archiv/ ... irectories[/Edit][