[Func] _GetFreeDrive() - Dernière/Première lettre dispo
Posté : dim. 16 sept. 2012 22:41
Pour un projet en cours, j'ai eu besoin d'obtenir la dernière lettre de lecteur disponible sur un système.
Afin de rendre la fonction un peut plus complète, j'y ai adjoint deux paramètres :
Et un petit exemple :
.
Afin de rendre la fonction un peut plus complète, j'y ai adjoint deux paramètres :
- Le premier permet d'interdire certaines lettres de lecteurs.
- Le second permet d'obtenir la première lettre de lecteur disponible (au lieu de la dernière).
Code : Tout sélectionner
; #FUNCTION# ================================================================================================
; Name...........: _GetFreeDrive()
; Description ...: Return the last or the first available drive letter
; Syntax.........: _GetFreeDrive([$szReserved, [$iWay]])
; Parameters ....: $szReserved - Drive's letter that you don't want to use
; $iWay - 0 | Last drive's letter
; 1 | First drive's letter
;
; Return values .: Success - Return the last or the first free drive letter
; Failure - Return "" and sets @error:
; |1 - There is no available letter
;
; Author ........: Tlem (tlem@@tuxolem.fr)
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......:
; ===========================================================================================================
Func _GetFreeDrive($szReserved = "", $iWay = 0)
Local $sDrive, $sDriveList, $aDrive, $aUsedDrives
If $iWay = 1 Then ; First drive's letter
$sDriveList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Else ; Last drive's letter
$sDriveList = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
EndIf
; Create an array of drives's letters
$aDrive = StringSplit($sDriveList, "")
; Get all Drives used by system
$aUsedDrives = DriveGetDrive("ALL")
; Convert result in string of letters only
For $i = 1 To UBound($aUsedDrives) - 1
$sDrive = $sDrive & StringTrimRight($aUsedDrives[$i], 1)
Next
; Reverse Check of last unused drive letter
For $i = 1 To UBound($aDrive) - 1
If Not StringInStr($sDrive & $szReserved, $aDrive[$i]) Then
Return $aDrive[$i]
EndIf
Next
; If we are here, all the drive's lettres are used !!!
Return SetError(1, 0, "")
EndFunc ;==>_GetFreeDrive
Code : Tout sélectionner
MsgBox(64, "_GetFreeDrive", "Dernière lettre de lecteur disponible : " & _GetFreeDrive("VWXYZ") & @TAB)
MsgBox(64, "_GetFreeDrive", "Première lettre de lecteur disponible : " & _GetFreeDrive("AB", 1) & @TAB)