[英]How to get drive root from share path?
我有一個帶有某些路徑的文件夾,例如C:\\repository\\data
。
我共享了此文件夾,因此它具有一些主機名,例如\\\\10.10.10.254\\repository\\data
我有辦法
string GetDriveRootPathFromPath(IEnumerable<string> lokalPathCollection, string sharePath)
{
var rootPath = _win32.GetVolumePathName(sharePath);
return lokalPathCollection.FirstOrDefault(x => x.Equals(rootPath, StringComparison.OrdinalIgnoreCase));
}
它們不起作用,因為找不到名為\\\\10.10.10.254\\
磁盤。
在示例中,由於repository\\data
位於該磁盤上,因此如何修改此方法以查找磁盤C:\\
?
簡單答案:不能。 因為Windows共享不包含有關本地路徑的信息。
長答案:
由於您知道服務器的IP地址或主機名,並且由於您具有執行wmi查詢的權限,因此可以使用wmi來獲取信息。
pulic string GetLocalPath(string computerName, string shareName)
{
var scope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName));
scope.Connect();
var query = new ObjectQuery("SELECT * FROM win32_share WHERE name = '" + shareName + "'");
var searcher = new ManagementObjectSearcher(scope,query);
var queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
return m["Path"];
}
return null;
}
用法:
var path = @"\\10.10.10.254\repository\data";
var segments = path.Split('\\');
var computerName = segments[2];
var shareName = segments[3];
var localPath = GetLocalPath(computerName, shareName);
var result = Path.Combine(localPath, String.Join("\\", segments.Skip(4)));
首先,您可以共享子文件夾,例如:
c:\path1\path2\myshare
它看起來像
\\127.0.0.1\mysahre
因此,所有共享文件夾的工作示例都應位於驅動器的根目錄中
那么您可以從lokalPathCollection中的路徑中剝離前導驅動器。 我的意思是代替存儲C:\\repository\\data
,您將需要存儲repository\\data
。 在這種情況下,請將您的行更改為:
return "c:\\" + lokalPathCollection.FirstOrDefault(x => x.EndWith(rootPath, StringComparison.OrdinalIgnoreCase));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.