Page 1 sur 1

Get drive letter to file path

Publié : jeu. 25/nov./2010 16:13
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\")) 
@+

Re: Get drive letter to file path

Publié : jeu. 25/nov./2010 17:09
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

Re: Get drive letter to file path

Publié : jeu. 25/nov./2010 18:48
par Jacobus
Ben euh... simplement pour être sûr que le volume existe :roll:

Re: Get drive letter to file path

Publié : jeu. 25/nov./2010 18:59
par G-Rom
tu peut toujours faire + simple non ? du genre :

Code : Tout sélectionner

ExamineDirectory(0,"Z:\","*.*")
Debug IsDirectory(0)

Re: Get drive letter to file path

Publié : jeu. 25/nov./2010 19:07
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 

Re: Get drive letter to file path

Publié : jeu. 25/nov./2010 20:31
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: