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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

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

Message par gnozal »

Pour info, sous windows uniquement :

Code : Tout sélectionner

MakeSureDirectoryPathExists_("temp\test\01\")
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message 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.
Dernière modification par G-Rom le mar. 22/mars/2011 14:46, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

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

Message 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")
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

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

Message par GallyHC »

Bonjour,

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

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre