Page 1 sur 1

[Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : dim. 16 sept. 2012 22:41
par Tlem
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 :
  • 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).
Voici la fonction :

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
Et un petit exemple :

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)
.

Re: [Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : dim. 07 oct. 2012 22:01
par filou87
Bonjour,

Moi je le faisais à la brute à partir de la lettre "o"... :wink:

Je prends.
Merci.

Re: [Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : dim. 07 oct. 2012 22:05
par Tlem
Bonsoir. J'ai édité votre message pour supprimer le code joint, car celui-ci ne présentait aucun intérêt dans ce sujet. En effet, le sujet traite de la première ou dernière lettre de lecteur disponible et non d'un script de connexion vers un partage. Merci quand même de votre intérêt pour le sujet.

Re: [Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : dim. 07 oct. 2012 22:11
par filou87
Bonsoir,

L'idée était d'obtenir la dernière lettre de lecteur disponible sur un système pour executer un net use ...
Votre code intégré dans mon script me semble ,comme je le disais , plus propre.
Encoe merci de ce partage.

Re: [Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : mer. 10 oct. 2012 21:08
par DimVar
Ca va me servir.
Merci bien.
► Afficher le texte

Re: [Func] _GetFreeDrive() - Dernière/Première lettre dispo

Posté : mer. 10 oct. 2012 22:34
par Tlem
Corrigé.

Il faut que j’arrête la pierre ... :oops: