Tôi chỉ có nhu cầu về điều tương tự mà OP đang hỏi và sau khi tìm kiếm trên Google và đọc câu trả lời, không ai trong số họ cung cấp những gì tôi nghĩ rằng OP và tôi đang tìm kiếm.
Vấn đề ở đây là người ta có thể ánh xạ chia sẻ mạng Drive Y
trong khi một người khác trong tổ chức có thể có cùng chia sẻ mạng được ánh xạ như Drive X
; do đó, gửi một liên kết như Y:\mydirectory
có thể không hoạt động cho bất kỳ ai khác ngoại trừ tôi.
Như OP giải thích, Explorer hiển thị đường dẫn thực tế trong thanh Explorer, nhưng bạn không thể sao chép nó (gõ rất tẻ nhạt và dễ bị lỗi, vì vậy đây không phải là một tùy chọn) ngay cả khi bạn chọn copy as path
từ menu ngữ cảnh:
Vì vậy, giải pháp tôi đưa ra (bằng cách sao chép mã của người khác) là một chương trình C # nhỏ mà bạn có thể gọi từ menu ngữ cảnh trong Explorer và sẽ cho phép bạn dịch ký tự ổ đĩa đã ánh xạ sang thực tế UNC path
.
Đây là mã:
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()));
}
}
}
}
Và đây là Pathing
định nghĩa lớp (Tôi sẽ cố gắng tìm nguồn thực tế vì tôi không thể nhớ nơi tôi đã tìm thấy nó):
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;
}
}
Bạn xây dựng chương trình và đặt chương trình thực thi ở đâu đó trong PC của bạn, ví dụ như, trong c:\Utils
Bây giờ bạn thêm một tùy chọn menu ngữ cảnh trong Explorer như sau:
Regedit và sau đó:
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"
Bạn xong việc rồi. Bây giờ bạn sẽ thấy tùy chọn này khi bạn nhấp chuột phải vào thư mục từ ổ đĩa được ánh xạ:
Ghi chú
Tôi có thể cung cấp tệp thực thi để bạn không phải tự biên dịch. Đơn giản chỉ cần thả cho tôi một lưu ý ở đây.