J'ai juste eu besoin de la même chose que ce qu'OP demande et après avoir cherché sur Google et lu les réponses, aucun d'entre eux n'a fourni ce que je pense que l'OP et moi recherchons.
Le problème ici est que l'on peut faire correspondre un partage de réseau à Drive Y
alors que quelqu'un d'autre dans l'organisation peut faire correspondre le même partage de réseau à Drive X
; donc, envoyer un lien tel que Y:\mydirectory
peut ne fonctionner pour personne d'autre que moi.
Comme l'explique le PO, Explorer affiche le chemin réel dans la barre d'exploration, mais vous ne pouvez pas le copier (la frappe est fastidieuse et sujette à des erreurs, ce n'est donc pas une option) même si vous choisissez copy as path
dans le menu contextuel :
Donc la solution que j'ai trouvée (en copiant le code de quelqu'un d'autre) est un petit programme C# que vous pouvez appeler depuis un menu contextuel dans Explorer et qui vous permettra de traduire la lettre de lecteur mappée en UNC path
réel. Voici le code :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Utils
{
//This is the only piece of code I wrote
class Program
{
[STAThread]
static void Main(string[] args)
{
//Takes the parameter from the command line. Since this will
//be called from the context menu, the context menu will pass it
//via %1 (see registry instructions below)
if (args.Length == 1)
{
Clipboard.SetText(Pathing.GetUNCPath(args[0]));
}
else
{
//This is so you can assign a shortcut to the program and be able to
//Call it pressing the shortcut you assign. The program will take
//whatever string is in the Clipboard and convert it to the UNC path
//For example, you can do "Copy as Path" and then press the shortcut you
//assigned to this program. You can then press ctrl-v and it will
//contain the UNC path
Clipboard.SetText(Pathing.GetUNCPath(Clipboard.GetText()));
}
}
}
}
Et voici la définition de la classe Pathing
(je vais essayer de trouver la source actuelle 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);
/// <summary>
/// Given a path, returns the UNC path or the original. (No exceptions
/// are raised by this function directly). For example, "P:008-02-29"
/// might return: "\networkserver\Shares\Photos008-02-09"
/// </summary>
/// <param name="originalPath">The path to convert to a UNC Path</param>
/// <returns>A UNC path. If a network drive letter is specified, the
/// drive letter is converted to a UNC or network path. If the
/// originalPath cannot be converted, it is returned unchanged.</returns>
public static string GetUNCPath(string originalPath)
{
StringBuilder sb = new StringBuilder(512);
int size = sb.Capacity;
// look for the {LETTER}: combination ...
if (originalPath.Length > 2 && originalPath[1] == ':')
{
// don't use char.IsLetter here - as that can be misleading
// the only valid drive letters are 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 construisez le programme et mettez l'exécutable quelque part dans votre PC, disons par exemple dans c:\Utils
Maintenant vous ajoutez une option de menu contextuel dans Explorer comme suit :
Regedit et ensuite :
HKEY_CLASSES_ROOT\*\Directory\Shell
Right-click Shell --> New Key --> Name: "To UNC Path"
Right-click To UNC Path --> New Key --> Name: command
Right-click Default entry and select `Modify`
Value Data: c:\Utils\Utils.exe "%1"
Vous avez terminé. Vous verrez maintenant cette option lorsque vous ferez un clic droit sur un répertoire d'un lecteur mappé :
Note
Je peux fournir l'exécutable pour que vous n'ayez pas à faire la compilation vous-même. Il suffit de m'envoyer une note ici.