我正在尝试使用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
。我真的很困惑。
答案 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;
}
你可以玩你的价值观,看看这是否适合你的任务。您还可以为无效字符自定义自己的列表。