Get drive letter to file path

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Get drive letter to file path

Message par Jacobus »

Récupérer l'ID d'un lecteur d'après le chemin complet d'un fichier ou dossier
sans avoir à entrer dans les infos de volume.

Code : Tout sélectionner

Procedure.s GetDriveLetterToFilePath(filepath$) 
  
  *Buffer = AllocateMemory(255) 
  Protected ipt.l , C.l 
  Global Dim LogicalDrives.s(16) ; pour 16 lecteurs
  LogicalDrives(1) = ""
  ipt = 1 ; Initialise le compte à 1 
  
  For i = 0 To GetLogicalDriveStrings_(255, *Buffer) 
   C = PeekB(*Buffer + i) 
    If C <> 0 
       LogicalDrives(ipt) = UCase(LogicalDrives(ipt) + Chr(C)) 
    Else 
       ipt = ipt + 1 
       LogicalDrives(ipt) = "" 
    EndIf 
  Next   
    
    While LogicalDrives(ipt) = "" 
      ipt = ipt - 1 
    Wend  
    
      For i = 1 To ipt    
        Drivlet$ = LogicalDrives(i)
        If FindString(filepath$,Drivlet$,1)      
           ProcedureReturn Drivlet$
          Break 
        EndIf    
      Next
   FreeMemory(*Buffer) 
      
EndProcedure 

;Test
Debug GetDriveLetterToFilePath(UCase("c:\Users\MyName\Bluk\")) 
@+
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.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Get drive letter to file path

Message par Patrick88 »

euh, et pourquoi tout ce chichi alors qu'un simple

Code : Tout sélectionner

Debug Left(UCase("c:\Users\MyName\Bluk\"),1)+":\"
fait la même chose ?

pat
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: Get drive letter to file path

Message par Jacobus »

Ben euh... simplement pour être sûr que le volume existe :roll:
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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Get drive letter to file path

Message par G-Rom »

tu peut toujours faire + simple non ? du genre :

Code : Tout sélectionner

ExamineDirectory(0,"Z:\","*.*")
Debug IsDirectory(0)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: Get drive letter to file path

Message par Jacobus »

Ok, bon en effet, à vous deux vous le faites en 4 lignes. :| Je prend

@G-Rom : Y a pas besoin d'expliquer ton avatar, on comprend tout de suite où tu veux en venir :mrgreen:

Voici donc une solution collègiale

Code : Tout sélectionner

Procedure.l VerifVolumeExist(Drive$)
  
  If ExamineDirectory(0,Drive$,"*.*")  
    If IsDirectory(0) <> 0
      ProcedureReturn 1
    Else 
      ProcedureReturn 0
    EndIf        
    FinishDirectory(0)
  EndIf

EndProcedure

;Test

Filename$ = "c:\Users\MyName\Bluk\Blonk.txt" 
Drive$ = Left(UCase(Filename$),1)+":\"
If VerifVolumeExist(Drive$) = 1 
  Debug "Le support "+Drive$+" a été trouvé et est valide."
Else 
  Debug "Le support "+Drive$+" est invalide, vérifiez votre nom de fichier."
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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Get drive letter to file path

Message par Backup »

Jacobus a écrit : @G-Rom : Y a pas besoin d'expliquer ton avatar,

pfff ! ça craint ! :? :roll:

G-Rom , des fois , je crois que t'es pas cuit ! :roll:
Répondre