Je venais juste de ressentir le besoin de la même chose que demande OP et après avoir cherché sur Google et lu les réponses, aucun d'eux ne fournissait ce que je pense que OP et moi cherchons.
Le problème ici est que quelqu'un peut mapper un partage réseau sur Drive Y
tandis que quelqu'un d'autre dans l'organisation peut avoir le même partage réseau mappeé comme Drive X
; donc, envoyer un lien tel que Y:\mydirectory
ne fonctionnera pour personne d'autre sauf moi.
Comme l'explique OP, l'Explorateur montre le chemin réel dans la barre de l'Explorateur, mais vous ne pouvez pas le copier (taper est fastidieux et sujet aux erreurs, donc ce n'est pas une option) même si vous choisissez copy as path
dans le menu contextuel:
La solution que j'ai trouvée (en copiant le code de quelqu'un d'autre) est un petit programme en C# que vous pouvez appeler depuis un menu contextuel dans l'Explorateur et qui vous permet de traduire la lettre du lecteur mappé en le chemin UNC
réel.
Voici le code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Utils
{
//C'est la seule partie du code que j'ai écrite
class Program
{
[STAThread]
static void Main(string[] args)
{
//Prend le paramètre de la ligne de commande. Comme cela
//sera appelé depuis le menu contextuel, le menu contextuel
//le passera via %1 (voir les instructions du registre ci-dessous)
if (args.Length == 1)
{
Clipboard.SetText(Pathing.GetUNCPath(args[0]));
}
else
{
//C'est pour que vous puissiez attribuer un raccourci au programme et pouvoir
//l'appeler en appuyant sur le raccourci que vous avez attribué. Le programme
//prendra la chaîne qui se trouve dans le Presse-papiers et la convertira en chemin UNC
//Par exemple, vous pouvez "Copier comme chemin" et ensuite appuyer sur le raccourci que
//vous avez attribué à ce programme. Ensuite, vous pouvez appuyer sur ctrl-v et il contiendra
//le chemin UNC
Clipboard.SetText(Pathing.GetUNCPath(Clipboard.GetText()));
}
}
}
}
Et voici la définition de la classe Pathing
(je vais essayer de trouver la source réelle car je ne me souviens pas où je l'ai trouvée):
public static class Pathing
{
[DllImport("mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern int WNetGetConnection(
[MarshalAs(UnmanagedType.LPTStr)] string localName,
[MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName,
ref int length);
///
/// Étant donné un chemin, retourne le chemin UNC ou l'original. (Aucune exception
/// n'est levée par cette fonction directement). Par exemple, "P:\2008-02-29"
/// pourrait renvoyer: "\\serveurduréseau\Partages\Photos\2008-02-09"
///
/// Le chemin à convertir en un chemin UNC
/// Un chemin UNC. Si une lettre de lecteur réseau est spécifiée, la
/// lettre de lecteur est convertie en un chemin UNC ou réseau. Si le
/// originalPath ne peut pas être converti, il est renvoyé inchangé.
public static string GetUNCPath(string originalPath)
{
StringBuilder sb = new StringBuilder(512);
int size = sb.Capacity;
// chercher la combinaison {LETTRE} :...
if (originalPath.Length > 2 && originalPath[1] == ':')
{
// ne pas utiliser char.IsLetter ici - car cela peut être trompeur
// les seules lettres de lecteur valides sont a-z && A-Z.
char c = originalPath[0];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
{
int error = WNetGetConnection(originalPath.Substring(0, 2),
sb, ref size);
if (error == 0)
{
DirectoryInfo dir = new DirectoryInfo(originalPath);
string path = Path.GetFullPath(originalPath)
.Substring(Path.GetPathRoot(originalPath).Length);
return Path.Combine(sb.ToString().TrimEnd(), path);
}
}
}
return originalPath;
}
}
Vous compilez le programme et placez l'exécutable quelque part dans votre PC, par exemple, dans c:\Utils
Ensuite, vous ajoutez une option de menu contextuel dans l'Explorateur comme ceci:
Regedit puis:
HKEY_CLASSES_ROOT\*\Directory\Shell
Clic droit sur Shell --> Nouveau --> Clé --> Nom: "To UNC Path"
Clic droit sur To UNC Path --> Nouveau --> Clé --> Nom: command
Clic droit sur Entrée par défaut et sélectionner `Modifier`
Données de la valeur: c:\Utils\Utils.exe "%1"
Vous avez terminé. Maintenant, vous verrez cette option lorsque vous ferez un clic droit sur un répertoire depuis un lecteur mappé:
Remarque
Je peux fournir l'exécutable pour que vous n'ayez pas à le compiler vous-même. Il vous suffit de me laisser un message ici.
1 votes
Si vous utilisez dans un environnement d'entreprise sécurisé où vous ne pouvez pas installer d'applications tierces et/ou accéder au registre, alors cette solution fonctionnera ... superuser.com/a/704374/46099