;
; Créé un fichier au bout d'un chemin d'accès en créant les répertoires intermédiaires si ils n'existent pas.
;
Procedure DoCreateFile(n.l, FileName.s)
PathPart.s = ""
FilePart.s = GetFilePart(FileName)
If GetPathPart(FileName) <> ""
i = 1
Repeat
Node.s = StringField(FileName, i, "\")
If Node = FilePart
Break
EndIf
PathPart + Node + "\"
If FileSize(PathPart) = -2
Else
CreateDirectory(PathPart)
EndIf
i + 1
Until Node = ""
EndIf
ProcedureReturn CreateFile(n, FileName)
EndProcedure
;
; Test
;
If DoCreateFile(0, "toto\dudule\machin.txt")
CloseFile(0)
EndIf
If DoCreateFile(0, "machin.txt")
CloseFile(0)
EndIf
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Ce code permet de créer un dossier dont le ou les répertoires parents n'existent pas.
; Exemple :
; je souhaite créé le dossier "C:\Program files\truc\bidule"
; Seul le dossier "C:\Program files\" existe
; Si j'utilise CreateDirectory("C:\Program files\truc\bidule"), cela ne va pas marcher car le dossier "C:\Program files\truc\" n'existe pas
; Si j'utilise CreateDirectoryEx("C:\Program files\truc\bidule"), tous les les dossiers seront créés :
; C:\Program files\
; C:\Program files\truc\
; C:\Program files\truc\bidule
Procedure.l CreateDirectoryEx(FolderPath.s)
; Retourne 1 si la création du dossier à réussi, 0 sinon
Protected Folder.s, Txt.s, Cpt.l
If FileSize(Folder) = -1
Folder.s = StringField(FolderPath, 1, "\") + "\"
Cpt.l = 1
Repeat
Cpt + 1
Txt.s = StringField(FolderPath, Cpt, "\")
Folder = Folder + Txt + "\"
CreateDirectory(Folder)
Until Txt = ""
EndIf
If FileSize(FolderPath) = -2
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
;- Test
If CreateDirectoryEx("c:\truc\bidule")
MessageRequester("", "Le dossier 'c:\truc\bidule' a été créé", 0)
Else
MessageRequester("Erreur", "impossible de créer le dossier 'c:\truc\bidule'", 0)
EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
oui et non ... si CreateDirectory le permet avec un paramètre optionnel je suis d'accord, sinon il vaut mieux éviter car cela laisse la porte ouverte à la création de répertoires sans contrôle.
Dans ce cas, un prog en développement et contenant des bugs peut provoquer des catastrophes.
Donc on peut demander que cela soit rendu possible avec un paramètre pour sécuriser la chose.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Ya une commande MSDN qui le fait (pas générique c'est vrai..)
Par contre vos codes doivent avoir les deux même erreurs :
* vous ne vous assurez pas que le Drive existe
* vous ne vous assurez pas que vous avez les droits en écriture : "CreateDirectory()" peut échouer...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
lionel_om a écrit :Ya une commande MSDN qui le fait (pas générique c'est vrai..)
Personellement, j'utilise MakeSureDirectoryPathExists_() [API Windows].
Selon Win32.hlp :
The MakeSureDirectoryPathExists function creates all the directories in the specified DirPath.
BOOL MakeSureDirectoryPathExists(
IN LPSTR DirPath
);
Parameters
DirPath
A pointer to an ASCII string that contains a valid path name.
Return Values
If the function succeeds, the return value is TRUE.
If the function fails, then the return value is FALSE. To retrieve extended error information, call GetLastError.
Remarks
The DirPath is parsed and each directory, beginning at the root, is created, if it does not already exist. If only some of the directories are created, the function will return FALSE.
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#System_Separator = "/"
PathSystem.s = "/tmp/test1/test2/test3"
CompilerElse
#System_Separator = "\"
PathSystem.s = "C:\test1\test2\test3"
CompilerEndIf
; Auteur : Le Soldat Inconnu
;
; Explication du programme :
; Ce code permet de créer un dossier dont le ou les répertoires parents n'existent pas.
; Exemple :
; je souhaite créé le dossier "C:\Program files\truc\bidule"
; Seul le dossier "C:\Program files\" existe
; Si j'utilise CreateDirectory("C:\Program files\truc\bidule"), cela ne va pas marcher car le dossier "C:\Program files\truc\" n'existe pas
; Si j'utilise CreateDirectoryEx("C:\Program files\truc\bidule"), tous les les dossiers seront créés :
; C:\Program files\
; C:\Program files\truc\
; C:\Program files\truc\bidule
Procedure.l CreateDirectoryEx(FolderPath.s)
; Retourne 1 si la création du dossier à réussi, 0 sinon
Protected Folder.s, Txt.s, Cpt.l
If FileSize(Folder) = -1
Folder.s = StringField(FolderPath, 1, #System_Separator) + #System_Separator
Cpt.l = 1
Repeat
Cpt + 1
Txt.s = StringField(FolderPath, Cpt, #System_Separator)
Folder = Folder + Txt + #System_Separator
CreateDirectory(Folder)
Until Txt = ""
EndIf
If FileSize(FolderPath) = -2
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
;- Test
If CreateDirectoryEx(PathSystem)
MessageRequester("Succes", "Le dossier '"+PathSystem+"' a été créé", 0)
Else
MessageRequester("Erreur", "impossible de créer le dossier '"+PathSystem+"'", 0)
EndIf
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.