在c#中验证文件名


Validating a filename in c#

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How check if given string is legal (allowed) file name under Windows?

我是stackoverflow的新手。 我知道这是一个愚蠢的问题,但我被困在其中。 我想验证文件名,以便它只接受合法路径。 我试过以下代码:

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

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


这将按预期工作。

没有必要发明一个正则表达式来执行此操作,就好像无效字符集一直在更改,您的代码将过时,而此调用仍将按预期工作。


试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bool bOk = false;
try
{
    new System.IO.FileInfo(fileName);
    bOk = true;
}
catch (ArgumentException)
{
}
catch (System.IO.PathTooLongException)
{
}
catch (NotSupportedException)
{
}

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


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


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

虽然,如果你想检查它是否是一个有效的路径,那么我猜你还有更多的事情要做。 就像它是一个有效的驱动器号,路径,文件夹等。