当前位置:  开发笔记 > 程序员 > 正文

检查路径是UNC路径还是本地路径的正确方法是什么?

如何解决《检查路径是UNC路径还是本地路径的正确方法是什么?》经验,为你挑选了5个好方法。

检查路径是否为UNC路径的最简单方法当然是检查完整路径中的第一个字符是字母还是反斜杠.这是一个很好的解决方案还是会出现问题?

我的具体问题是,如果路径中有驱动器号,我想创建一个System.IO.DriveInfo对象.



1> JaredPar..:

试试这个扩展方法

public static bool IsUncDrive(this DriveInfo info) {
  Uri uri = null;
  if ( !Uri.TryCreate(info.Name, UriKind.Absolute, out uri) ) {
    return false;
  }
  return uri.IsUnc;
}


DriveInfo对象不能用于UNC路径.但是,如果我将其更改为DirectoryInfo的扩展,并使用FullName而不是Name,它似乎工作正常.

2> TheSmurf..:

由于在第一和第二位置没有两个反斜杠的路径通过定义而不是UNC路径,因此这是进行该确定的安全方式.

第一个位置(c :)中带有驱动器号的路径是带根的本地路径.

没有这些东西的路径(myfolder\blah)是一个相对的本地路径.这包括只有一个斜杠的路径(\ myfolder\blah).



3> Scott Dorman..:

最准确的方法是使用shlwapi.dll中的一些互操作代码

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
[ResourceExposure(ResourceScope.None)]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
internal static extern bool PathIsUNC([MarshalAsAttribute(UnmanagedType.LPWStr), In] string pszPath);

然后你会这样称呼它:

    /// 
    /// Determines if the string is a valid Universal Naming Convention (UNC)
    /// for a server and share path.
    /// 
    /// The path to be tested.
    ///  if the path is a valid UNC path; 
    /// otherwise, .
    public static bool IsUncPath(string path)
    {
        return PathIsUNC(path);
    }

@JaredPar使用纯托管代码获得最佳答案.



4> larsmoa..:

这是我的版本:

public static bool IsUnc(string path)
{
    string root = Path.GetPathRoot(path);

    // Check if root starts with "\\", clearly an UNC
    if (root.StartsWith(@"\\"))
    return true;

    // Check if the drive is a network drive
    DriveInfo drive = new DriveInfo(root);
    if (drive.DriveType == DriveType.Network)
    return true;

    return false;
}

与@JaredPars版本相比,此版本的优势在于它支持任何路径,而不仅限于DriveInfo



5> 小智..:

我发现的一个技巧是使用dInfo.FullName.StartsWith(String.Empty.PadLeft(2, IO.Path.DirectorySeparatorChar))dInfo是DirectoryInfo对象的地方 - 如果该检查返回True则它是UNC路径,否则它是本地路径


或者`.StartsWith(new string(Path.DirectorySeparatorChar,2))`.
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有