Verfasst: 21.05.2007 22:22
Ich habe hier eine Prozedur, die so arbeitet. Allerdings bin ich mir nicht sicher, ob die Prozedur funktioniert. Sie erstellt immer korrekt die Verzeichnisse, aber ich schaffe es nicht, die Prozedur bewusst zum scheitern zu bringen, um zu sehen, ob sie dann immernoch korrekt arbeitet:
Sol auch auf Linux gehen, kann's aber nicht testen.
Arbeitsweise:
Zunächst hänge ich ein OS-spezifisches Backslash an und fange dann alle doppelten (Back)Slashes ab
Dann speichere ich den aktuellen Pfad von GetCurrentDirectory() in einer Variablen um ihn am Ende wiederherzustellen.
Danach wechsle ich so weit in den Pfad hinein, wie es nur geht, mittels SetCurrentDirectory(). Das ist das selbe, als würde ich in einer Eingabeaufforderung folgendes eingeben:Und schon bin ich im Ordner "C:\Programme\PureBasic\".
Kann ich nicht tiefer in den Pfad wechseln weiß ich: "Aha, das Verzeichnis gibt's noch nicht, ich muss es erstellen. Von da an wechsle ich immer 2 Befehle ab: CreateDirectory() zum Erstellen des Verzeichnisses und SetCurrentDirectory(), um in das soeben erstelle Verzeichnis zu wechseln.
Laufwerk C: gibt's ja schon, dann würde es in der Eingabeauffoerdung so aussehen:
Geht das immer so in Ordnung, wird die Prozedur 1 zurückgeben und den aktuellen Pfad "Workingdirectory) zurücksetzen, ansonsten wird der Pfad zurückgesetzt und 0 zurückgegeben. Ihr erinnert euch: Ich speichere zu Anfang das "CurrentDir", um es nach Abschluss der Operation wiederherzustellen.
Sollte die Prozedur fehlschlagen, werden alle bis dahin erstellen Ordner gelöscht.
Verbesserungen erwünscht!
// Edit: Ich habe nicht extra groß geschrieben, das ist ein Forumsbug, offensichtlich wenn man > innerhalb der [ code ] Tags benutzt...
ja, ist ein forenbug - workaround eingefügt - mach nen zeilenumbruch am ende des code/quote blocks - Kaeru fecit
Code: Alles auswählen
EnableExplicit
Procedure CreatePath(path.s)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#Directory_Separator$="\"
CompilerDefault
#Directory_Separator$="/"
CompilerEndSelect
path+#Directory_Separator$
While CountString(path, #Directory_Separator$+#Directory_Separator$)
path=ReplaceString(path, #Directory_Separator$+#Directory_Separator$, #Directory_Separator$)
Wend
Protected this.s=GetCurrentDirectory(), exist=1, n, new.s=this, temp.s
While SetCurrentDirectory(StringField(path, exist, #Directory_Separator$))
exist+1
Wend
For n=exist To CountString(path, #Directory_Separator$)
temp=StringField(path, n, #Directory_Separator$)
If Not (CreateDirectory(temp) And SetCurrentDirectory(temp))
DeleteDirectory(new, "", #PB_FileSystem_Recursive)
SetCurrentDirectory(this)
ProcedureReturn 0
EndIf
new+#Directory_Separator$+temp
Next
SetCurrentDirectory(this)
ProcedureReturn 1
EndProcedure
Debug CreatePath("C:\Test\PrograMMe\\pure basic")
Arbeitsweise:
Zunächst hänge ich ein OS-spezifisches Backslash an und fange dann alle doppelten (Back)Slashes ab

Dann speichere ich den aktuellen Pfad von GetCurrentDirectory() in einer Variablen um ihn am Ende wiederherzustellen.
Danach wechsle ich so weit in den Pfad hinein, wie es nur geht, mittels SetCurrentDirectory(). Das ist das selbe, als würde ich in einer Eingabeaufforderung folgendes eingeben:
Code: Alles auswählen
> C:
> cd "programme"
> cd "pureBasic"
Kann ich nicht tiefer in den Pfad wechseln weiß ich: "Aha, das Verzeichnis gibt's noch nicht, ich muss es erstellen. Von da an wechsle ich immer 2 Befehle ab: CreateDirectory() zum Erstellen des Verzeichnisses und SetCurrentDirectory(), um in das soeben erstelle Verzeichnis zu wechseln.
Laufwerk C: gibt's ja schon, dann würde es in der Eingabeauffoerdung so aussehen:
Code: Alles auswählen
> C:
> mdir "Programme"
> cd "Programme"
> mdir "PureBasic"
> cd "pureBasic"
Sollte die Prozedur fehlschlagen, werden alle bis dahin erstellen Ordner gelöscht.
Verbesserungen erwünscht!

// Edit: Ich habe nicht extra groß geschrieben, das ist ein Forumsbug, offensichtlich wenn man > innerhalb der [ code ] Tags benutzt...

ja, ist ein forenbug - workaround eingefügt - mach nen zeilenumbruch am ende des code/quote blocks - Kaeru fecit