Saya hanya memiliki kebutuhan untuk hal yang sama yang ditanyakan OP dan setelah mencari di Google dan membaca jawabannya, tidak satupun dari mereka memberikan apa yang saya pikir OP dan saya cari.
Masalahnya di sini adalah bahwa seseorang dapat memetakan pangsa jaringan ke Drive Y
sedangkan orang lain dalam organisasi mungkin memiliki pangsa jaringan yang sama dipetakan sebagai Drive X
; karena itu, mengirim tautan seperti Y:\mydirectory
mungkin tidak berfungsi untuk orang lain kecuali saya.
Seperti yang dijelaskan OP, Explorer memang memperlihatkan jalur aktual di bilah Explorer, tetapi Anda tidak dapat menyalinnya (mengetik membosankan dan rentan terhadap kesalahan, jadi ini bukan pilihan) bahkan jika Anda memilih copy as path
dari menu konteks:
Jadi solusi yang saya buat (dengan menyalin kode orang lain) adalah program C # kecil yang dapat Anda panggil dari menu konteks di Explorer dan akan memungkinkan Anda untuk menerjemahkan huruf drive yang dipetakan ke aktual UNC path
.
Ini kodenya:
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()));
}
}
}
}
Dan inilah Pathing
definisi kelas (saya akan mencoba mencari sumber yang sebenarnya karena saya tidak ingat di mana saya menemukannya):
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:\2008-02-29"
/// might return: "\\networkserver\Shares\Photos\2008-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;
}
}
Anda membangun program dan meletakkan executable di suatu tempat di PC Anda, katakan misalnya, di c:\Utils
Sekarang Anda menambahkan opsi menu konteks di Explorer sebagai berikut:
Regedit lalu:
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"
Kamu selesai. Sekarang Anda akan melihat opsi ini ketika Anda mengklik kanan direktori dari drive yang dipetakan:
Catatan
Saya dapat memberikan yang dapat dieksekusi sehingga Anda tidak perlu melakukan kompilasi sendiri. Cukup beri saya catatan di sini.