Retourner la liste des lecteurs réseau sous Windows

Support Technique 4D

- Titre : Retourner la liste des lecteurs réseau sous Windows

- Auteur : Support Technique 4D

- Parution : 9 octobre 2008

- Licence : Copyright ® 2005-2008 4D s.a.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Présentation ♪

I - Présentation ♪

Produit : 4D v11 SQL  ·  Plateforme : Windows

Sous Windows, il est possible de mapper des lecteurs réseaux en lecteurs logiques (E:, F:, H:, etc.).

Le code 4D ci-dessous propose un exemple pour retourner une liste des lecteurs réseau courants.

Nous utilisons deux tableaux qui recevront les résultats.

Le tableau tt_LecteurUNC stocke les lettres des lecteurs.

Le tableau tt_CheminUNC stocke les chemins UNC correspondants.

code 4D

C_TEXTE(flux_sortie;flux_entree;flux_erreur;$separateur;$CRLF;$Fini;$continuer;$tmpTestCaractere)
C_ENTIER LONG($PremierOK;$PremierNL;$DernierePosition;$tmpPositionTrouvee;$tmpLongueur;$tmpLongeurTrouvee)
C_ENTIER LONG($tmpLongueurUNC;$DernierCaractereTrouve;$compteur)
TABLEAU TEXTE(tt_TrouvesUNC;0)
TABLEAU TEXTE(tt_LecteurUNC;0)
TABLEAU TEXTE(tt_CheminUNC;0)
$separateur:="-------------------------------------------------------------------------------"
flux_sortie:=""
flux_entree:=""
flux_erreur:=""
$CRLF:=Caractere(Retour chariot )+Caractere(Retour à la ligne )
LANCER PROCESS EXTERNE("NET USE";flux_entree;flux_sortie;flux_erreur)
$Fini:=""
$DernierePosition:=1
$numTrouve:=0

` chaque ligne commençant par OK est mise dans le tableau
Repeter
$PremierOK:=Position("OK";flux_sortie;$DernierePosition)
$PremierNL:=Position($CRLF;flux_sortie;$PremierOK)
Si ($PremierOK>$DernierePosition)
$DernierePosition:=$PremierNL
AJOUTER A TABLEAU(tt_TrouvesUNC;Sous chaine(flux_sortie;$PremierOK;($PremierNL-$PremierOK)))
$numTrouve:=$numTrouve+1
Sinon
$Fini:="oui"
Fin de si
Jusque ($Fini="oui")

` retire tout ce qui se trouve avant la lettre du lecteur réseau
Boucle ($compteur;1;Taille tableau(tt_TrouvesUNC))
$tmpLongueur:=Longueur(tt_TrouvesUNC{$compteur})-13
tt_TrouvesUNC{$compteur}:=Sous chaine(tt_TrouvesUNC{$compteur};14;$tmpLongueur)
Fin de boucle

` enlève la chaine "Microsoft Windows Network" des elements du tableau
Boucle ($compteur;1;Taille tableau(tt_TrouvesUNC))
$tmpPositionTrouvee:=Position("RÇseau Microsoft Windows";tt_TrouvesUNC{$compteur};1;$tmpLongeurTrouvee)
Si ($tmpPositionTrouvee#0)
tt_TrouvesUNC{$compteur}:=Sous chaine(tt_TrouvesUNC{$compteur};1;$tmpPositionTrouvee-1)
Fin de si
Fin de boucle

` séparer en deux tableaux : lettres des lecteurs et chemin UNC
Boucle ($compteur;1;Taille tableau(tt_TrouvesUNC))
AJOUTER A TABLEAU(tt_LecteurUNC;Sous chaine(tt_TrouvesUNC{$compteur};1;2))
AJOUTER A TABLEAU(tt_CheminUNC;Sous chaine(tt_TrouvesUNC{$compteur};11))
Fin de boucle

` enlève l'espace blanc des éléments de tt_CheminUNC
Boucle ($compteur;1;Taille tableau(tt_CheminUNC))
$continuer:="oui"
Repeter
$tmpLongueurUNC:=Longueur(tt_CheminUNC{$compteur})
$DernierCaractereTrouve:=Position(" ";tt_CheminUNC{$compteur};$tmpLongueurUNC)
$tmpTestCaractere:=Sous chaine(tt_CheminUNC{$compteur};$DernierCaractereTrouve)
Si ($tmpTestCaractere=" ")
tt_CheminUNC{$compteur}:=Sous chaine(tt_CheminUNC{$compteur};1;$DernierCaractereTrouve-1)
Sinon
$continuer:="non"
Fin de si
Jusque ($continuer="non")
Fin de boucle

Résultat dans le débogueur de 4D (adresse IP du lecteur Y: fictive) :