在C#中验证文件名

7
英译中:

可能的重复问题:
如何检查给定的字符串是否是Windows下合法(允许)的文件名?

我是stackoverflow的新手。我知道这是一个愚蠢的问题,但我卡在这里了。我想验证一个文件名,使其只接受合法的路径。我尝试了以下代码:

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

它起作用了,但是我有点困惑它是否会完全起作用,所以我想知道其他答案。我认为我们也可以使用正则表达式来验证文件名。任何帮助都将是非常好的。

它不能正常工作,因为它将“:::”视为字符,并将其视为有效的文件名。 - Running Rabbit
4个回答

3
这将按预期工作。
无需发明一个正则表达式来完成此操作,因为如果无效字符集发生变化,您的代码将过时,而此调用仍将按预期工作。

1

试试这个:

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

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

1

这是正确的做法。将来,如果您的程序需要移植到不同的操作系统上,它仍将继续工作。手工制作的解决方案将会更不有效。


0

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

虽然,如果你想检查它是否是一个有效的路径,那么你需要做更多的工作。比如它是一个有效的驱动器号、路径、文件夹等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接