SetCurrentDirectory() - Remonter d'un dossier.

Codes specifiques à Linux
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

SetCurrentDirectory() - Remonter d'un dossier.

Message par Geo Trouvpatou »

Salut.

Pour tester la présence d'un dossier obligatoire à côté de mon executable, je procède comme ceci :

Code : Tout sélectionner

;dossierDeDepart$ = GetCurrentDirectory()

dossierDatasExisteOuPas = SetCurrentDirectory("datas")

If dossierDatasExisteOuPas
    ; Si le dossier existe, on est dedans, donc il faut en ressortir.
    SetCurrentDirectory("../") ; Avec windows pas de problème.

    ;SetCurrentDirectory(dossierDeDepart$) ; Même comme ça avec Linux ça ne fonctionne pas.
EndIf


If dossierDatasExisteOuPas
   
    ; On lance le programme
    
Else
 
    ; Attention le dossier "datas" n'existe pas, Oulala c'est grave.
    
EndIf
Le code fonctionne bien sous Windows mais je n'arrive pas à ressortir du dossier et me remettre à la racine sous Linux, même avec la technique que j'ai mis en commentaire dans mon code.

Peut-être avez-vous une meilleure solution pour tester l'existence d'un dossier ?

Bye.
Dernière modification par Geo Trouvpatou le ven. 31/juil./2009 17:50, modifié 1 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Bizarre dans la doc on a :
SetCurrentDirectory(Repertoire$)
au lieu d'un :
resultat = SetCurrentDirectory(Repertoire$)
Et pourtant sous windows en faisant :
dossierDatasExisteOuPas = SetCurrentDirectory("datas")

dossierDatasExisteOuPas vaut bien 1 si le dossier existe et 0 s'il n'existe pas.
Mais sous Linux j'ai toujours 0.

Je suis étonné que cela ne renvoi pas de résultat ???

Je continue mes recherches.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Simplement pour préciser que SetCurrentDirectory("../") remonte bien d'un dossier aussi sous Linux, mais comme apparemment sous Linux dossierDatasExisteOuPas = SetCurrentDirectory("datas") renvoie toujours 0 même si le dossier existe, je n'entrais pas dans la condition :

Code : Tout sélectionner

If dossierDatasExisteOuPas 
  ; Si le dossier existe, on est dedans, donc il faut en ressortir. 
  SetCurrentDirectory("../") ; Avec windows pas de problème. 

EndIf 
Donc le SetCurrentDirectory("../") n'étais pas effectué.

Mais alors comment vérifier que le dossier existe et qu'on est dedans ?????

Avec un Resultat$ = GetCurrentDirectory()
Et on vérifie que "datas" est dans la chaine Resultat$
Je n'ai que cette solution qui me trotte en tête.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Je viens de m'apercevoir que apparemment si le dossier existe, cela me renvoi 0 et si le dossier n'existe pas cela me renvoi -1

Je vais donc certainement jongler avec ça entre Windows et Linux

Dossier existe : Windows = 1 et Linux = 0
Dossier n'existe pas : Windows= 0 et Linux= -1
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

salut Geo Trouvpatou,

je vais peut être dire une bêtise mais en te servant de OSVersion() tu peut te permettre de créer 2 procédures comme sa avec 1 seul exécutable tu peut le compiler sur les 2 OS :wink:

fin c'est a tester mais bon voila l'idée qui m'est venu en premier :D





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut Venom.

Je sais, puisque mon 1er gros soft fini à 99.99% (Client FTP pour envoyer un script perso) tourne à 100% sur Windows et Linux à partir d'un seul fichier.
Avec ce type de code :

Code : Tout sélectionner

CompilerSelect #PB_Compiler_OS
            CompilerCase #PB_OS_Windows 
              
            CompilerCase #PB_OS_Linux
            
CompilerEndSelect
Ce que j'ai voulu dire c'est que j'ai dû faire ça :

Code : Tout sélectionner

dossierDatasExisteOuPas = SetCurrentDirectory("datas") 

CompilerSelect #PB_Compiler_OS
        
    CompilerCase #PB_OS_Windows 
        
        ; Sous Windows si le dossier existe, dossierDatasExisteOuPas vaut 1, sinon cela vaut 0
        If dossierDatasExisteOuPas 
            SetCurrentDirectory("../")
            Open_Window_principale()

        Else
            MessageRequester("ATTENTION.", "Le programme ne peut pas démarrer.", #MB_ICONERROR)
            End
        EndIf
        
        
    CompilerCase #PB_OS_Linux 
        
        ; Sous Linux si le dossier existe, dossierDatasExisteOuPas vaut 0, sinon cela vaut -1
        If dossierDatasExisteOuPas = 0
            SetCurrentDirectory("../")
            Open_Window_principale()
        Else
            MessageRequester("ATTENTION.", "Le programme ne peut pas démarrer.", #PB_MessageRequester_Ok)
            End
        EndIf  
 
CompilerEndSelect
Regardes mes commentaires.

Bye.
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

oui j'ai compris la valeur renvoyé est différente d'un OS a un autre.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre