2012-07-30 50 views
3

可能重复:
How check if given string is legal (allowed) file name under Windows?验证文件名在C#

我是新来的StackOverflow。我知道这是一个愚蠢的问题,但我陷入了困境。我想验证一个文件名,以便它只应该接受合法的路径。我曾尝试下面的代码:

if (txtFileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{ 
    MessageBox.Show("The filename is invalid"); 
    return; 
} 

它的工作,但是,我是一个有点困惑是否会完全工作或没有,所以我想知道其他的答案了。我认为我们也可以使用正则表达式验证文件名。任何帮助都会很棒。

+0

它不工作,因为它接受:::作为characters..and它说,为有效的文件名 – Yash 2012-07-30 10:29:44

回答

2

这将按预期工作。

有没有必要发明一个正则表达式来做到这一点,就好像无效字符的集合改变了你的代码将会过时一样,而这个调用仍然会按预期工作。

0

这取决于你在做什么。 如果它只是一个文件名你正在验证,那么这将工作。框架函数将检查特定操作系统的无效文件名字符,并将随着.NET框架一起更新。而你的正则表达式不会。

虽然,如果你想检查它是否是有效的路径,那么还有一些你必须做的我猜。像它是一个有效的驱动器号,路径,文件夹等。

1

这是正确的方法。将来,如果您的程序将被移植到不同的操作系统,它将继续工作。手工制作的解决方案效果不佳。

1

试试这个:

bool bOk = false; 
try 
{ 
    new System.IO.FileInfo(fileName); 
    bOk = true; 
} 
catch (ArgumentException) 
{ 
} 
catch (System.IO.PathTooLongException) 
{ 
} 
catch (NotSupportedException) 
{ 
} 

if (!bOk) 
{ 
    // ... 
} 
else 
{ 
    // ... 
}