字符串路径验证

时间:2012-10-18 04:58:24

标签: c# path

我这里有一个文件路径的字符串(来自用户的输入)。我检查了字符串,以便符合条件:

  • 检查文件路径的无效字符
  • 不接受绝对路径 (\ Sample \ text.txt)

无效字符是:

< > :“/ \ |?*

我试过在catch子句中捕获这些无效字符。它的工作原理除了'\'。它将接受'C:\\ Sample \ text.txt'这是一个无效的文件路径。

以下示例应为无效路径:

  • :\ text.txt
  • :text.txt
  • \:text.txt
  • \ text.txt
  • C:\\\的text.txt

ff。是有效路径的示例:

  • C:\的text.txt

我在这里发布了类似的问题,但似乎没有一个能解决我的问题。

进行此类检查的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

您可以使用Path.GetFullPath,如果路径无效,它将抛出异常。您可以使用以下方法:

public static bool IsValidPath(string path)
{
    try
    {
       path = path.Replace(@"\\", ":"); // to cancel out c:\\\\test.text
       string temp = Path.GetPathRoot(path); //For cases like: \text.txt
       if (temp.StartsWith(@"\"))
            return false;
       string pt = Path.GetFullPath(path);
    }
    catch //(Exception NotSupportedException) // catch specific exception here or not if you want
    {
        return false;
    }
    return true;
}

要测试的示例代码:

List<string> list = new List<string>()
{
    @":\text.txt",
    @":text.txt",
    @"\:text.txt",
    @"\text.txt",
    @"C:\\\text.txt",
    @"C:\text.txt",

};

foreach(string str in list)
{
    Console.WriteLine("Path: {0} is Valid = {1}" ,str,IsValidPath(str));
}

输出:

Path: :\text.txt is Valid = False
Path: :text.txt is Valid = False
Path: \:text.txt is Valid = False
Path: \text.txt is Valid = False
Path: C:\\\text.txt is Valid = False
Path: C:\text.txt is Valid = True

答案 1 :(得分:1)

使用regex.match()方法进行文件路径验证:

Match match = Regex.Match(input, ^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(?i)(txt|gif|pdf|doc|docx|xls|xlsx)$,
        RegexOptions.IgnoreCase);