【问题标题】:Validating a filename in c# [duplicate]在c#中验证文件名[重复]
【发布时间】:2012-07-27 21:17:42
【问题描述】:

可能重复:
How check if given string is legal (allowed) file name under Windows?

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

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

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

【问题讨论】:

  • 它不工作,因为它接受 ::: 作为字符..它说是有效的文件名

标签: c#


【解决方案1】:

这将按预期工作。

无需发明正则表达式来执行此操作,就好像您的代码更改的无效字符集将过期,而此调用仍将按预期工作。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-03
          • 2013-09-03
          • 2012-12-19
          • 2012-12-11
          • 2013-07-20
          • 2012-01-30
          • 1970-01-01
          相关资源
          最近更新 更多