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éseaux 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 correspondant.

code 4D
Sélectionnez

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 2 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 élements 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 debugger de 4D (adresse IP du lecteur Y: fictive) :

Image non disponible