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.
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 boucleRésultat dans le débogueur de 4D (adresse IP du lecteur Y: fictive) :


