[Tuto] récupérer le nom du dernier répertoire d'un Dossier

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

[Tuto] récupérer le nom du dernier répertoire d'un Dossier

Message par Ar-S »

Il existe surement de nombreuses façons de récupérer le nom du dernier répertoire d'un dossier, voici la mienne.
Utilisation des commandes ReverseString(), FindString(), mid()
Assez longue car diverses vérifications sont faites.
On peut aussi ajouter au choix le Slash à la fin du nom

L'astuce consiste à inverser le nom du dossier, ainsi, il suffit de rechercher le second slash pour détecter la position du nom du dernier dossier.

Code : Tout sélectionner

; Ar-S / 2010 PB 4.50
; Récupération du dernier nom de dossier avec possibilité de lui faire précéder la date.

SOURCE$="c:\purebasic\examples\" ; pour l'exemple

; Procédure de récupération du dernier nom de fichier
; L'option choixSlash permet d'ajouter "\" ou pas à la fin du nom.
; #SLASHON pour l'ajouter
; #SLASHOFF pour ne pas l'ajouter

Procedure.s GetLastDirectory(DossierSource$,choixSlash)
  #SLASHON=1
  #SLASHOFF=0
  
  ;vérification que le slash existe à la fin du chemin sinon on l'ajoute.
  if NOT right(DossierSource$,1)="\"
    DossierSource$+"\"
  EndIf
  
  ; vérification que le chemin existe et qu'on ne soit pas à la racine d'un lecteur
  if DossierSource$<>"" AND len(DossierSource$)>3 
    ; On inverse le nom du chemin complet
    DossierSource$=ReverseString(DossierSource$) ; celui si prend donc le nom : \selpmaxe\cisaberup\:c
    PosSlash=FindString(DossierSource$,"\",3)

    ;Gestion de l'ajout du Slash (/) ou pas
    select choixSlash
      case #SLASHON
        ; Extraction du nom du répertoire
        DossierSource$=ReverseString(mid(DossierSource$,2,PosSlash-2))+"\"
      case #SLASHOFF
        ; Extraction du nom du répertoire
        DossierSource$=ReverseString(mid(DossierSource$,2,PosSlash-2))
    EndSelect
    
  ; si le chemin n'existe pas, on retourne 0  
  else
    DossierSource$="0"
  endif
  
  ProcedureReturn DossierSource$
EndProcedure

Debug "avec slash : " + GetLastDirectory(SOURCE$,#SLASHON)
Debug "sans slash : " + GetLastDirectory(SOURCE$,#SLASHOFF)
 
Voilou. Image
Dernière modification par Ar-S le dim. 29/août/2010 19:43, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Tuto] récupérer le nom du dernier répertoire d'un Dossi

Message par Backup »

t'es en forme !! :D
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: [Tuto] récupérer le nom du dernier répertoire d'un Dossi

Message par bombseb »

Et comme ca (plus court):

Code : Tout sélectionner

Procedure.s GetLastDir (DossierSource$)
  If Right (DossierSource$, 1) = "\"
    Flag = 0 
  Else
    Flag = 1
  EndIf
  
  dir$ = StringField (DossierSource$, CountString (DossierSource$, "\") + Flag, "\")
  
  ProcedureReturn dir$
EndProcedure
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Tuto] récupérer le nom du dernier répertoire d'un Dossi

Message par Ar-S »

En effet, c'est plus court.
Par contre en cas d'erreur, pas de retour 0
si par exemple ton chemin est "c:\", ta proce va retourner "c:"
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: [Tuto] récupérer le nom du dernier répertoire d'un Dossi

Message par bombseb »

oui, mais bon je considère c: comme un répertoire...
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Tuto] récupérer le nom du dernier répertoire d'un Dossi

Message par Ar-S »

bombseb a écrit :oui, mais bon je considère c: comme un répertoire...
Toi oui mais un programme (et quelques user lambda) sont très con :mrgreen:
Mais là je j'avoue je chipote ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre