如何通过 C# 判断一个 路径 是本机还是远程 ?
生活随笔
收集整理的這篇文章主要介紹了
如何通过 C# 判断一个 路径 是本机还是远程 ?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
咨詢區(qū)
David Boike
請(qǐng)問在 C# 中是否有好的方式判斷 path 是在本地還是在遠(yuǎn)程,我想到了用 UNC 屬性來判斷,比如下面的代碼:
new?Uri(path).IsUnc但這代碼也有一定的問題,它會(huì)誤判下面的 path 格式。
\\machinename\sharename\directory \\10.12.34.56\sharename\directory上面這兩種格式也是在本地,而不是遠(yuǎn)程。
回答區(qū)
Stephen
我是借助 Shlwapi.dll 這個(gè) win32 api 來實(shí)現(xiàn)的,可以用它來判斷當(dāng)前的 path 來自于 drivers 還是 UNC。
private?static?bool?IsLocalPath(String?path) {if?(!PathIsUNC(path)){return?!PathIsNetworkPath(path);}Uri?uri?=?new?Uri(path);return?IsLocalHost(uri.Host);?//?Refer?to?David's?answer }[DllImport("Shlwapi.dll")] [return:?MarshalAs(UnmanagedType.Bool)] static?extern?bool?PathIsNetworkPath(String?pszPath);[DllImport("Shlwapi.dll")] [return:?MarshalAs(UnmanagedType.Bool)] static?extern?bool?PathIsUNC(String?pszPath);Eric Rosenberger
可以通過 path 的 host 來判斷當(dāng)前是否為 回路地址,我不知道這是否是最高效的解決方案,但適合我。
IPAddress[]?host;IPAddress[]?local;bool?isLocal?=?false;host?=?Dns.GetHostAddresses(uri.Host);local?=?Dns.GetHostAddresses(Dns.GetHostName());foreach?(IPAddress?hostAddress?in?host){if?(IPAddress.IsLoopback(hostAddress)){isLocal?=?true;break;}else{foreach?(IPAddress?localAddress?in?local){if?(hostAddress.Equals(localAddress)){isLocal?=?true;break;}}if?(isLocal){break;}}}Renato Heeb
我是通過 path 的 DriverInfo 的 DriverType = Network 來判斷當(dāng)前是否為遠(yuǎn)程。
public?static?bool?IsLocal(DirectoryInfo?dir){foreach?(DriveInfo?d?in?DriveInfo.GetDrives()){if?(string.Compare(dir.Root.FullName,?d.Name,?StringComparison.OrdinalIgnoreCase)?==?0)?//[drweb86]?Fix?for?different?case.{return?(d.DriveType?!=?DriveType.Network);}}throw?new?DriveNotFoundException();}點(diǎn)評(píng)區(qū)
這場(chǎng)景我還真的遇到過,曾經(jīng)給醫(yī)院內(nèi)網(wǎng)部署桌面程序時(shí),需要讀取局域網(wǎng)共享文件中的 txt 文本,三位大佬提供的方案很全面,學(xué)習(xí)了。
總結(jié)
以上是生活随笔為你收集整理的如何通过 C# 判断一个 路径 是本机还是远程 ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET 6新特性试用 | 可写JSON
- 下一篇: c# char unsigned_dll