5

我想验证文件名及其完整路径。我尝试了以下某些正则表达式,但它们都不能正常工作。

^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx)$
and
^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$
etc...

我的要求如下所述:假设文件名是“c:\Demo.txt”,那么它应该检查每一个可能性,比如不应该包含双斜杠(c:\\Demo\\demo.text),不包括额外的冒号(c::\Demo\demo.text)。应该接受 UNC 文件,如 ( \\staging\servers) 和其他验证。请帮忙。我真的被困在这里了。

4

2 回答 2

2

你为什么不使用 File 类?永远使用它!

File f = null;
string sPathToTest = "C:\Test.txt";
try{
f = new File(sPathToTest );
}catch(Exception e){
   Console.WriteLine(string.Format("The file \"{0}\" is not a valid path, Error : {1}.", sPathToTest , e.Message);
}

MSDN:http: //msdn.microsoft.com/en-gb/library/system.io.file%28v=vs.80%29.aspx

也许您只是在寻找 File.Exists ( http://msdn.microsoft.com/en-gb/library/system.io.file.exists%28v=vs.80%29.aspx )

还要看看 Path 类(http://msdn.microsoft.com/en-us/library/system.io.path.aspx

GetAbsolutePath 可能是获得您想要的东西的一种方法!(http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

string sPathToTest = "C:\Test.txt";
string sAbsolutePath = "";
try{
   sAbsolutePath = Path.GetAbsolutePath(sPathToTest);
   if(!string.IsNullOrEmpty(sAbsolutePath)){
     Console.WriteLine("Path valid");
   }else{
     Console.WriteLine("Bad path");
   }
}catch(Exception e){
   Console.WriteLine(string.Format("The file \"{0}\" is not a valid path, Error : {1}.", sPathToTest , e.Message);

}
于 2012-08-02T12:11:42.540 回答
0

如果您只对文件名部分感兴趣(而不是整个路径,因为您通过上传获取文件),那么您可以尝试这样的事情:

string uploadedName =  @"XX:\dem<<-***\demo.txt";

int pos = uploadedName.LastIndexOf("\\");
if(pos > -1)
    uploadedName = uploadedName.Substring(pos+1);

var c = Path.GetInvalidFileNameChars();
if(uploadedName.IndexOfAny(c) != -1)
     Console.WriteLine("Invalid name");
else
     Console.WriteLine("Acceptable name");

这将避免使用异常作为驱动代码逻辑的方法。

于 2012-08-02T12:45:10.750 回答