2012-10-18 64 views
1

我在这里有一个字符串(来自用户的输入)的文件路径。我检查字符串,使其符合标准:字符串路径验证

  • 支票无效字符的文件路径
  • 将不接受绝对路径(\样\的text.txt )

无效字符包括:

<>:“/ \ | ? *

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

以下实施例应为无效的路径:

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

ff。是一个有效的路径的一个例子:

  • C:\的text.txt

我已经通过张贴在这里,但他们都不似乎解决了我的问题类似的问题。

做这种检查最好的方法是什么?

+0

什么应该是有效的路径? – Habib

+0

我编辑了我的问题.. – CMA

+0

你想说如果路径有“\”或“/”将是无效的? – khan

回答

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 
+0

此解决方案说C:\\ Sample \ text.txt和C:\\\ text.txt有效。但是它们在Windows中有效。 –

+0

@AndreyStukalin,Path.GetFullPath忽略'(\\)'并考虑一次,你可以用':'替换一些无效的字符,然后检查。我已经更新了答案。感谢您指出 – Habib

+0

是啊!看起来不太好。 –

1

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

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

D:\ Main \ sitename Research \ Project_Mayank \ Project.Web \ StaticResources \ 2012 \ ClientPrint \ 6319522 \ NY 1120New York Blank Forms(2).pdf不适用于我。可能是什么原因 ? –