ForceDirectories Neu

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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

ForceDirectories Neu

Beitrag von ts-soft »

Code: Alles auswählen

;======= MakeSureDirectoryPathExists replacement =====================
;  Author:                Thomas Schulz (ts-soft)
;  Date:                  January 07, 2011
;  Target OS:             Windows
;  Target Compiler:       Requires PureBasic 4.xx
;=====================================================================
; Unterschied zu oben genannter API:
; 
; Unicode kompatibel
; relative Pfade zum Programverzeichnis oder zum aktuellem Verzeichnis
; Umgebungsvariablen werden expandiert
;=====================================================================

Procedure ForceDirectories(dir.s, rel2program = #False)
  Protected.i Index = 2, count, i, length
  Protected.s actDir, dir2

  If Not dir : ProcedureReturn #False : EndIf
  length = ExpandEnvironmentStrings_(dir, @dir2, 0)
  If length
    dir2 = Space(length)
    If ExpandEnvironmentStrings_(dir, @dir2, length)
      dir = dir2
    EndIf
  EndIf
  dir = ReplaceString(dir, "/", "\")
  If Right(dir, 1) <> "\" : dir + "\" : EndIf
  If FileSize(dir) = -2 : ProcedureReturn #True : EndIf
  If Left(dir, 1) = "\"
    dir = Right(dir, Len(dir) -1)
  EndIf
  If Not Right(StringField(dir, 1, "\"), 1) = ":"
    If rel2program
      dir = GetPathPart(ProgramFilename()) + dir
    Else
      dir = GetCurrentDirectory() + dir
    EndIf
    If FileSize(dir) = -2 : ProcedureReturn #True : EndIf
  EndIf
  actDir = StringField(dir, 1, "\") + "\"
  count = CountString(dir, "\")
  For i = Index To count
    actDir + StringField(dir, i, "\") + "\"
    If FileSize(actDir) = -2 : Continue : EndIf
    CreateDirectory(actDir)
  Next
  If FileSize(dir) = -2 : ProcedureReturn #True : EndIf
EndProcedure

ForceDirectories("c:\aaa\bbb")
ForceDirectories("settings", 1)
ForceDirectories("settings")
ForceDirectories("%APPDATA%\ts-soft\goodgame")
Ich hoffe mal, es kann jemand gebrauchen.

Gruß
Thomas
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