CreateDirectoryPath()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
String
Beiträge: 69
Registriert: 17.05.2007 16:22

Beitrag von String »

:oops: Na dann halt so. :oops: thanks! :allright:

Code: Alles auswählen

Procedure CreateTopDirectory(path.s)  
  If Right(path.s,1)<>"\":path.s+"\":EndIf:ProcedureReturn MakeSureDirectoryPathExists_(@path.s)
EndProcedure

Zuletzt geändert von String am 20.05.2007 21:45, insgesamt 1-mal geändert.
PB v4.**
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

AND51 hat geschrieben:@ Xaby:
Nett, dein CompilerIf, aber ich würde die Variable doch lieber in die Prozedur packen, statt außerhalb? Also als protected, statt global?!
weder noch.
ich würde eine kompilezeit-bedingung in der erzeugung einer konstanten resultieren lassen, wie sich das gehört.

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  #Seperator$ ="" ; für Windows
CompilerElse
  #Seperator$ ="/" ; für MacOS, Linux
CompilerEndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@String
Auch überflüssig, MakeSureDirectoryExist funktioniert mit oder ohne
abschließendem Backslash korrekt!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
String
Beiträge: 69
Registriert: 17.05.2007 16:22

Beitrag von String »

Da spuckt MakeSure nicht die Wahrheit aus.

Der Ordner “testA“ Fehlt

Code: Alles auswählen

Procedure CreateTopDirectory2(path.s) 
  ProcedureReturn MakeSureDirectoryPathExists_(@path.s)
EndProcedure 


Debug Str(CreateTopDirectory2("c:\Test\testA")) + " = Test ohne \"


Procedure CreateTopDirectory(path.s) 
  If Right(path.s,1)<>"\":path.s+"\":EndIf:ProcedureReturn MakeSureDirectoryPathExists_(@path.s) 
EndProcedure 


Debug Str(CreateTopDirectory("c:\Test\testB")) + " = Test ohne \"

PB v4.**
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

tschuldige, hast Recht!

Aber trotzdem Unnütz :mrgreen:

Normallerweise habe ich einen Pfad einschl. Datei. nutze
MakeSureDirectoryExists also mit GetPathPart, wo das Backslash immer da
ist. Ohne Datei wäre das erstellen des Ordnerpfades ja sinnlos
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nunja... aber ein Installer erzeugt erst den pfad, und kopiert dann die dateien hinein resp. entpackt das archiv.

und witziger weise sind die pfadangaben im auswahlfenster des requesters der meisten installer ohne den abschließenden backslash.

was passiert denn, wenn old MakeSure eine pfadangabe mit doppeltem backslash am ende bekommt?
wenn das ohne meckern funzt, dann könnte man grundsätzlich einen anhängen, egal wie der pfad vorher aussieht...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
String
Beiträge: 69
Registriert: 17.05.2007 16:22

Beitrag von String »

Genau darauf wollte ich auch grade hinaus.
Warst schneller.
Und daher bevorzuge ich doch lieber meine Variante
Die sich unter anderem auch durch die voran gestellten Beiträgen ergeben hat.
PB v4.**
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Der Installer erzeugt erst den Pfad, korrekt.

Code: Alles auswählen

file.s = "c:\test\testa\blub.txt"
MakeSureDirectoryPathExists_(GetPathPart(file))
CopyFile(bla, file)
Wer natürlich dem User erlaubt den Pfad per Hand einzutragen, der muß
schon eine Menge Aufwand betreiben um die Korrektheit des Pfades zu
prüfen. Da genügt keiner der hier geposteten Codes :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
String
Beiträge: 69
Registriert: 17.05.2007 16:22

Beitrag von String »

Alles für die Sicherheit.
Und wer 3 Backslash eingibt
Sollte den Computer verkaufen.

Code: Alles auswählen

Procedure CreateTopDirectory(path.s)  
  path.s = ReplaceString(path.s,"\\","\"):If Right(path.s,1)<>"\":path.s+"\":EndIf
Debug path.s
  ProcedureReturn MakeSureDirectoryPathExists_(@path.s)
EndProcedure

Wer natürlich dem User erlaubt den Pfad per Hand einzutragen,
So etwas soll vorkommen
PB v4.**
Benutzeravatar
String
Beiträge: 69
Registriert: 17.05.2007 16:22

Beitrag von String »

Alles für die Sicherheit.
Und wer 3 Backslash eingibt
Sollte den Computer verkaufen.

Code: Alles auswählen

Procedure CreateTopDirectory(path.s)  
  path.s = ReplaceString(path.s,"\\","\"):If Right(path.s,1)<>"\":path.s+"\":EndIf
Debug path.s
  ProcedureReturn MakeSureDirectoryPathExists_(@path.s)
EndProcedure

Debug CreateTopDirectory("c:\Test\testD")
Debug CreateTopDirectory("c:\Test\testE\")
Debug CreateTopDirectory("c:\Test\testF\\")

Wer natürlich dem User erlaubt den Pfad per Hand einzutragen,
So etwas soll vorkommen
PB v4.**
Antworten