Ca tombe pile poil, pour mon nouveau projet j'avais besoin d'une procedure comme Create_Directory.
Donc remis à ma sauce avec ma façon de faire, des noms et des explications en français.
J'aime pas les variables nommées "resultat.s" parce qu'en plein milieu d'un code quand on voit "resultat", on ne sait pas si "resultat" prend un nombre ou une chaine.
Alors que "resultat$", on sait tout de suit ce que la variable doit contenir.
Goût personnel ou ignorance de la subtilitée entre "resultat.s" et "resultat$".
Code : Tout sélectionner
Procedure.b DirectoryCreate(dossier$)
; Il est préférable de mettre le code ci-dessous parce que pour MakeSureDirectoryPathExists_
; Si l'on met : MakeSureDirectoryPathExists_(toto\titi\vovo\aze) cela ne créer pas le repertoire
; aze considérant certainement que c'est un fichier.
If Right(dossier$, 1) <> "\"
dossier$ + "\"
EndIf
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Debug "Windows Use"
; Sous Windows autant utiliser une API existante.
ProcedureReturn MakeSureDirectoryPathExists_(dossier$)
CompilerCase #PB_OS_Linux Or #PB_OS_MacOS
Debug "Linux Mac Use"
Protected indexDossierActuel.b
Protected nbDossiersExistants.b
Protected nomDossier$
Protected nomCheminComplet$
Repeat
indexDossierActuel + 1
Debug "indexDossierActuel DEBUT : "+ Str(indexDossierActuel)
nomDossier$ = StringField(dossier$, indexDossierActuel, "\")
Debug "nomDossier$ : "+ nomDossier$
If nomDossier$ <> ""
; On a un dossier principal et pas de sous-dossier.
If indexDossierActuel = 1
nomCheminComplet$ + nomDossier$
Debug Str(indexDossierActuel) +" nomCheminComplet$ + nomDossier$ >>> " + nomCheminComplet$
Else
nomCheminComplet$ + "\" + nomDossier$
Debug Str(indexDossierActuel) +" nomCheminComplet$ + nomDossier$ >>> " + nomCheminComplet$
EndIf
; Si c'est un repertoire et qu'il existe alors on incremente nbDossiersExistants
If FileSize(nomCheminComplet$) = -2
nbDossiersExistants + 1
Else
; Si le dossier n'existe pas, alors on le créer et si le dossier a bien été créé,
; alors on incremente nbDossiersExistants
If CreateDirectory(nomCheminComplet$) <> 0
nbDossiersExistants + 1
EndIf
EndIf
EndIf
Until nomDossier$ = ""
; Pour avoir le vrai nombre de dossier créés, on enlève 1
indexDossierActuel - 1
Debug "indexDossierActuel FIN : "+ Str(indexDossierActuel)
; Si indexDossierActuel = nbDossiersExistants, alors c'est que tout les dossiers on bien été créés
; et donc la procedure retourne 1
If indexDossierActuel = nbDossiersExistants
ProcedureReturn #True
EndIf
ProcedureReturn #False
CompilerEndSelect
EndProcedure
; Exemple :
Debug DirectoryCreate("toto\titi\vovo\aze")
En tout cas pour ma part ça va me servir

.