Lettre de chemin vers UNC
Je poste ici, le source résultant d'une discussion sur le forum. Des fois que ça serve.
Le but est de transformer un chemin du style "X:\chemin\" avec X correspondant à une redirection de connexion réseau, par \\serveur\dossierpartage\chemin\.
La fonction utilise une dll windows mpr.dll et la fonction WNetGetConnexionA
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Procédure FLecteur( cp_Chemin)
local
cl_Retour est une chaine
zl_Lecteur est une chaine asciiz sur 3
zl_Chemin est une chaine Asciiz sur 255 = complete( " ", 255)
nl_Taille est un entier = taille( zl_Chemin)
si cp_Chemin[[ à 2]] <> "\\" alors
zl_Lecteur = cp_Chemin[[ à 2]]
si AppelDLL32("mpr.dll","WNetGetConnectionA" , &zl_Lecteur, &Zl_Chemin, &nl_Taille) <> 0 alors
si sansespace( zl_Chemin) <> "" alors
cl_Retour = zl_Chemin+cp_Chemin[[ 3 a]]
sinon
cl_Retour = cp_Chemin
fin
sinon
cl_Retour = cp_Chemin
FIn
sinon
cl_Retour = cp_Chemin
FIN
renvoyer cl_Retour |
Chemin UNC d'un lecteur mappé sur un répertoire réseau ou inversement, chemin local à partir d'un chemin UNC.
Plus simplement, pour obtenir le chemin UNC d'un lecteur mappé sur un répertoire réseau, on peut utiliser :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
PROCEDURE CheminLocal_Vers_UNC(_sCheminLocal est une chaîne)
LOCAL
sRepLocal est une chaîne
sDisque est une chaîne
sDisque = fExtraitChemin(_sCheminLocal,fDisque)
sRepLocal = fExtraitChemin(_sCheminLocal,fRépertoire+fFichier)
SI RéseauNomRep(sDisque) <> "" ALORS
sDisque = RéseauNomRep(sDisque)
FIN
RENVOYER sDisque+sRepLocal |
Et pour l'opération inverse, obtenir le chemin local à partir d'un chemin UNC :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
PROCEDURE UNC_Vers_CheminLocal(_sCheminUNC est une chaîne)
LOCAL
sLecteurUNC est une chaîne
sRepUNC est une chaîne
sDisque est une chaîne
sLecteurUNC = fExtraitChemin(_sCheminUNC,fDisque)
sRepUNC = fExtraitChemin(_sCheminUNC,fRépertoire+fFichier)
POUR iLecteur = Asc("A") _A_ Asc("Z")
sDisque = Caract(iLecteur)
SI fDisquePrêt(sDisque) ALORS
SI Minuscule(RéseauNomRep(sDisque+":")) = Minuscule(sLecteurUNC) ALORS
RENVOYER sDisque+":"+sRepUNC
FIN
FIN
FIN
RENVOYER "" |
Bonne prog ! :ccool:
ReseauNomRep ne fonctionne pas / Lister les lecteurs réseau.
Sur certains postes, j'ai constaté que la fonction ReseauNomRep ne fonctionne pas. (http://doc.pcsoft.fr/fr-FR/?3066005&name=ReseauNomRep)
Je conseillerai donc au final d'utiliser la procédure décrite par Louis griffont pour récupérer le chemin UNC d'un lecteur réseau qui elle fonctionne dans tout les cas.
Pour ma part, j'ai donc surchargé la fonction ReseauNomRep :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
PROCEDURE ReseauNomRep(_sDisque est une chaîne)
LOCAL
sDisque est une chaîne ASCIIZ sur 3
sCheminUNC est une chaîne ASCIIZ sur 255 = Complète(" ",255)
iTaille est un entier
sDisque = _sDisque
iTaille = Taille(sCheminUNC)
AppelDLL32("mpr.dll","WNetGetConnectionA",&sDisque,&sCheminUNC,&iTaille)
sCheminUNC = SansEspace(sCheminUNC)
SI sCheminUNC = "" ALORS
sCheminUNC = WL.RéseauNomRep(_sDisque)
FIN
RENVOYER sCheminUNC |
Exemple de fonction permettant de lister les lecteurs réseau et de récupérer leur chemin UNC (En utilisant la procédure surchargée ci-dessus) :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
LOCAL
iLecteur est un entier
sReseauNomRep est une chaîne
POUR iLecteur = Asc("A") _A_ Asc("Z")
sReseauNomRep = ReseauNomRep(Caract(iLecteur)+":")
SI sReseauNomRep <> ""
Trace("Répertoire réseau détecté : "+sReseauNomRep)
FIN
FIN |
Bonne prog :ccool: