检查字符串是否为有效路径

时间:2014-07-14 07:11:11

标签: c# .net path uri

我正在尝试使用Uri.IsWellFormedUriString,但它不起作用,问题是 - 为什么:

class Program
{

    static void Main()
    {
        Console.WriteLine(IsWellFormed(@"C:\Windows"));
        Console.WriteLine(IsWellFormed(@"C:\\:\\//Windows32"));
    }

    public static bool IsWellFormed(string path)
    {
        string uriString = "file:///" + path;
        string wellFormed = uriString.Replace('\\', '/');
        return Uri.IsWellFormedUriString(wellFormed, UriKind.Absolute);
    }
}

预期true false输出但在两种情况下都会返回true。我真的很困惑。

1 个答案:

答案 0 :(得分:0)

这是一种没有try / catch的方法,尽管它可能不是最佳的:

        public static bool IsWellFormed(string path)
        {
            string path = "C:\\windows\\:ppz";
            var isRooted = Path.IsPathRooted(path);
            var root = Path.GetPathRoot(path);
            var list = path.Split(new char[] {Path.DirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries);            
            for (int i = 0; i < list.Length; i ++)
            {
                if(i == 0 && isRooted && s[i]+"\\" == root) continue;
                if (s[i].Intersect(Path.GetInvalidPathChars()).Count() != 0)
                    return false;
                if (s[i].Intersect(Path.GetInvalidFileNameChars()).Count() != 0)
                    return false;
            }
            return true;
        }

你可以玩你的价值观,看看这是否适合你的任务。您还可以为无效字符自定义自己的列表。