Für jeden Teilbereich des Pfades mußte zumindest noch CheckFilename()
ausführen.

Slash und doppelte Backslashes stören Windows eigentlich garnicht, alles andere muß getestet werden.
Code: Alles auswählen
Procedure CreateDirectoryPath(path.s)
path+"\"
While CountString(path, "\\")
path=ReplaceString(path, "\\", "\")
Wend
ProcedureReturn MakeSureDirectoryPathExists_(@path)
EndProcedure
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
@ts-softWeißt Du wieviele ungültige Stringkombinationen da noch möglich sind?
Code: Alles auswählen
Procedure.s CreateTopDirectory(path.s)
path+"\"
While CountString(path, "\\")
path=ReplaceString(path, "\\", "\")
Wend
If MakeSureDirectoryPathExists_(@path.s)
ProcedureReturn path.s
EndIf
EndProcedure
Debug CreateTopDirectory("c:\Test\testA\testX")
Debug CreateTopDirectory("c:\Test\\\\testA\\\testZ\\\\\")
Ja, irgendwie hatte es mir auch noch nicht gefallen mit der globalen Variable. Aber weißt ja, wie es manchmal ist, da fällt es einem einfach nicht einKaeru Gaman hat geschrieben:Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Windows #Seperator$ ="" ; für Windows CompilerElse #Seperator$ ="/" ; für MacOS, Linux CompilerEndIf
Wieso fängt dein "i" erst bei vier an? versuchst du damit "C:" zu übersprinen?al90 hat geschrieben:Code: Alles auswählen
Procedure.l MakeDirectoryGroup(Dir$) Protected i, b$, c$ If Right(Dir$,1)<>"" : Dir$+"" : EndIf If Mid(Dir$,2,2)=":" And FileSize(Dir$)=-1 c$=Left(Dir$,3) For i=4 To Len(Dir$) b$=Mid(Dir$,i,1) c$+b$ If b$="" CreateDirectory(c$) EndIf Next EndIf ProcedureReturn FileSize(Dir$) EndProcedure ;Debug MakeDirectoryGroup("C:\windows\temp\Eins\Zwei\Drei")
vielleicht gibt es schon eine native konstante, davon gibt es ja SO viele, die kann man garnicht alle kennen.Xaby hat geschrieben:Hab mich da schon oft gefragt, ob es da nicht schon eine Konstante von PB aus gibt und wenn nein, wieso nicht.
Genauso das ZeilenUmbruchzeichen. Immer muss man da irgendwas mit Charactern machen
Das ist eine reine Windows spezifische routine. Mit Linux & MacOS kenneXaby hat geschrieben:Wieso fängt dein "i" erst bei vier an? versuchst du damit "C:" zu übersprinen?(Gibt es sowas bei MacOS und Linux?)
![]()
Nicht für mich!Sowieso alles Humbug
Bei der API ich glaube (ts-soft hat sie als erster entdeckt.)Da wäre es blöd wenn jedesmal bei einem bereits
existierendem verzeichniss eine Fehlermeldung kommen würde.