18

除了正则表达式,如何在 C# 中确定字符串是本地文件夹字符串还是网络字符串?

例如:

我有一个字符串可以是"c:\a""\\foldera\folderb"

4

4 回答 4

24

我认为这个问题的完整答案是包括 DriveInfo.DriveType 属性的使用。

public static bool IsNetworkPath(string path)
{
    if (!path.StartsWith(@"/") && !path.StartsWith(@"\"))
    {
        string rootPath = System.IO.Path.GetPathRoot(path); // get drive's letter
        System.IO.DriveInfo driveInfo = new System.IO.DriveInfo(rootPath); // get info about the drive
        return driveInfo.DriveType == DriveType.Network; // return true if a network drive
    }

    return true; // is a UNC path
}

测试路径以查看它是否以斜杠字符开头,如果是,则它是 UNC 路径。在这种情况下,您将不得不假设它是一个网络路径 - 实际上它可能不是指向不同 PC 的路径,因为理论上它可能是指向您的本地计算机的 UNC 路径,但这不是我猜对大多数人来说可能,但如果你想要一个更安全的解决方案,你可以添加对这种情况的检查。

如果路径不是以斜杠字符开头,则使用 DriveInfo.DriveType 属性来确定它是否是网络驱动器。

于 2012-11-22T11:19:40.077 回答
23

new Uri(mypath).IsUnc

于 2010-12-01T15:15:06.693 回答
7

请参阅此答案以获取文件路径的 DriveInfo 对象

C# DriveInfo 文件信息

使用其中的 DriveType 来确定它是否是网络路径。

http://msdn.microsoft.com/en-us/library/system.io.driveinfo.drivetype.aspx

于 2010-12-01T15:10:56.737 回答
0

检查路径是否指向本地或网络驱动器的另一种方法:

var host = new Uri(@"\\foldera\folderb").Host; //returns "foldera"
if(!string.IsNullOrEmpty(host))
{
   //Network drive
}
于 2015-08-17T10:47:35.087 回答