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)