Page 1 sur 1

Création de répertoire multiple genre "temp/test/01/"

Publié : mar. 22/mars/2011 11:13
par GallyHC
Bonjour,

Pour un code de décompression de Zip j’avais besoin de faire une routine de création de répertoire multiple. Par exemple j’avais « Temp/test/01/ » donc le petit code va créer la suite de répertoire.

Voila le code et l’exemple en dessous :

Code : Tout sélectionner

Procedure.b Create_Directory(directory.s)
;
  Define bindex.l
  Define bnumbs.l
  Define bsplit.s
  Define stemps.s

  Repeat
    bindex + 1
    bsplit = StringField(directory, bindex, "/")
    If bsplit <> ""
      If bindex = 1
        stemps + bsplit
      Else
        stemps + "\" + bsplit
      EndIf
      If FileSize(stemps) = -2
        bnumbs + 1
      Else
        If CreateDirectory(stemps) <> 0
          bnumbs + 1
        EndIf
      EndIf
    EndIf
  Until bsplit = ""
  bindex - 1
  If bindex = bnumbs
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False

EndProcedure

Create_Directory("temp/test/01/")
j'espere que ce sera utile a certain :)

Cordialement,
GallyHC

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : mar. 22/mars/2011 14:14
par gnozal
Pour info, sous windows uniquement :

Code : Tout sélectionner

MakeSureDirectoryPathExists_("temp\test\01\")

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : mar. 22/mars/2011 14:25
par G-Rom
et la version portable :

Code : Tout sélectionner

ProcedureDLL.b MakeSureDirectoryPathExistsEX_(dir$)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows  
  ProcedureReturn MakeSureDirectoryPathExists_(dir$)
CompilerEndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  result = opendir_(dir$)
  If result <> 0
    closedir_(result)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf 
CompilerEndIf
EndProcedure

Debug MakeSureDirectoryPathExistsEX_("/usr/lib/")

edit : code pas bon , je verrais plus tard pour une modif.

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : mar. 22/mars/2011 14:44
par Kwai chang caine
gnozal a écrit :Pour info, sous windows uniquement :

Code : Tout sélectionner

MakeSureDirectoryPathExists_("temp\test\01\")
coooll !!!
J'avais vu souvent cette API, mais pas capté qu'elle creait les repertoires elle meme.
Je croyais que c'etait juste un controle de la presence, un peu comme Filesize :oops:
Merci pour l'info 8)

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : mer. 23/mars/2011 22:08
par GallyHC
Bonjour tous,

Merci pour c'est information fort intéressante, mais mon code appart juste le « \ » au lieu du « / » dans la création du répertoire sera multi OS ‘Windows, mac et linux) avec pas grand choses en code enfin c’est ce que je penses je serais le teste sur linux et max demain soir mais je pense que cela sera toujours bon.

Apres avec des API ok sa fonctionne mais sa reste non multi-OS (c’est mon avis).

Cordialement,
GallyHC

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : jeu. 24/mars/2011 7:19
par Chris
Et comme ça, ça doit être multi-plateforme.
Il suffit juste de rajouter le test pour la création des répertoires dans la boucle

Code : Tout sélectionner

Procedure CreateMultiDirectory(Volume.s, Directory.s)
  If Right(Directory,Len(Directory))<> "\" : Directory + "\" : EndIf
  Volume = Left(Volume, 1)+":\"
  
  SetCurrentDirectory(Volume)
  
  For i = 1 To CountString(Directory, "\")
    Dir$ + StringField(Directory, i, "\")+"\"
    CreateDirectory(Dir$)
  Next
EndProcedure

CreateMultiDirectory("C:\","MonTest\Temp\test\01")

Re: Création de répertoire multiple genre "temp/test/01/"

Publié : jeu. 24/mars/2011 13:25
par GallyHC
Bonjour,

Chris> la sa a l'aire po mal du tout, merci :) je vais voir a utilise ce code :)

Cordialement,
GallyHC