Chemins relatifs

Résolu
mdelahais Messages postés 30 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 16 juin 2009 - 23 févr. 2005 à 15:15
mdelahais Messages postés 30 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 16 juin 2009 - 23 févr. 2005 à 16:52
Bonjour,

Je travaille avec en VB6. Grâce à un DriveListBox, un DirListBox et un FileListBox, je sélectionne un fichier dans un répertoire. Le problème est que je travaille avec des disques réseaux. Or sur chaque poste, le nom des disques est différents (parfois c'est D, parfois c'est E...). Je voudrais donc travailler avec des chemins relatifs du type [file://\\Monserveur\MesDonnees\MesDocs\ \\Monserveur\MesDonnees\MesDocs\] plutôt qu'avec un chemin du type D:\MesDonness\MesDocs.
Pourriez vous me donner un coup de main?
Un grand merci d'avance.
Matthieu

4 réponses

mdelahais Messages postés 30 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 16 juin 2009 1
23 févr. 2005 à 16:52
J'ai trouvé de mon côté une solution un peu bancale mais qui me convient tout à fait.
En fait, je sélectionne mon fichier (disque, répertoire, nom fichier) avec un nom de répertoire absolu.
Ensuite, je récupère la variable Drive1.drive qui me donne quelque chose dans le style :
"e: [\\MonDisque]". A partir de cette valeur et en bidouillant les chaines de caractères, j'arrive à m'y retrouver. je vous donne la formule que j'utilise pour avoir mon nom de chemin relatif.
cheminRelatif=Mid(Drive1.Drive, 5, Len(Drive1.Drive) - 6) & Mid(File1.Path, 3) & "" & File1.FileName
Donc, si j'ai sélectionné le fichier suivant E:\MonDossier\MonFichier.doc, grâce à ma "fonction", cheminRelatif prend la valeur \\MonDisque\MonDossier\MonFichier.doc.

Un grand merci quand même pour votre aide. J'espère que ceci pour aider quelqu'un un jour.

Matthieu
3
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
23 févr. 2005 à 16:06
Je ne suis pas certain qu'on puisse se servir des chemins UNC.
D'ailleurs si quelqu'un sait ce serait interessant. Quand a ton prog,
je ne vois pas trop le probleme concernant les lecteurs reseaux, ton
DriveListBox est dynamique, il s'adaptera donc a la configuration des
lettres de lecteurs specifiques a chaque PC.

Il doit cependant y avoir un moyen de connaitre le nom du PC et son
equivalent en lettre de lecteur par les API, un peu comme lorsqu'on
liste les lecteurs reseaux d'un PC avec la commande "net use".

Pour les API, je connais pas les declarations exactes, mais si tu
regardes sur cette page, tu trouveras probablement ce que tu cherches.

http://www.mentalis.org/apilist/n.shtml



Bonne chance
0
mdelahais Messages postés 30 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 16 juin 2009 1
23 févr. 2005 à 16:15
Le problème est que j'utilise cette application (avec les treeview et tout le bataclan) pour récupérer des fichiers avec leur chemin d'accès que je mémorise dans une table. Donc, pour pouvoir utiliser mes fichiers depuis n'importe quel poste, il me faut des chemins relatifs.
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
23 févr. 2005 à 16:39
Hello,



Désolé mais je ne suis pas programmeur visual mais delphi. Cependant je
cherchais des infos sur un truc et je suis tombé sur ton message. En
delphi je fais effectivement cette transformation d'un chemin absolu
vers un chemin relatif. Je te donne la procedure que j'utilise pour le
faire j'espere qu'elle pourra t'aiguiller sur la bonne voie :



Avec

Drive : Le chemin par exemple F:\Data\MonFichier.xls

NetWorkDrive : Renvoie le nom relatif de F:\

Messages : Renvoie les messages d'erreur eventuels

Result : Dis si tout c'est bien déroulé.



procedure NetworkName(Drive : String;var NetworkDrive,Messages : String;var Result : Boolean);



var

HandleEnum:THandle;

NbRessources:DWord;

Buffer:array[1..50]of Netresource; // attention à le dimensionner correctement en fonction de votre réseau

TailleBuffer : DWord;

NumErreur,I : Integer;



begin

Result := False;

Drive := Copy(Drive,1,2);

NbRessources:=$FFFFFFFF;

TailleBuffer:=SizeOf(Buffer);



If WNetOpenEnum(RESOURCE_CONNECTED,RESOURCETYPE_ANY,0,nil,HandleEnum)<>NO_ERROR then

Messages := 'Impossible de définir le lecteur réseau'

else

begin

NumErreur:=WNetEnumResource(HandleEnum,NbRessources,@Buffer, TailleBuffer);



If NbRessources>0 then //si il y a au moins une ressource utilisée

begin



If
NumErreur<>NO_ERROR then Messages := 'erreur dans
WNetEnumRessource n° '+ IntToStr(NumErreur);



For I:=1 to NbRessources do

begin



If Drive = Buffer[i].lpLocalName then

begin

Result := True;

NetworkDrive := Buffer[i].lpRemoteName;

end;

end;

end;



WNetCloseEnum(HandleEnum);

end;

end;


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Rejoignez-nous