检查任意String是否为有效文件名的最简单方法

Rof*_*ion 71 .net c# file

在我的应用程序中,用户可以输入文件名.在处理之前,我想检查输入字符串是否是Windows Vista上的有效文件名.

这是最简单的方法吗?

通过有效我正在努力合法和不存在

SLa*_*aks 116

检查是否filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0!File.Exists(Path.Combine(someFolder, filename))

  • 反例:`"http://www.microsoft.com/"`传递你的测试,但不是有效的文件名,同样适用于`"::::"` (4认同)
  • <quote>不保证从此方法返回的数组包含文件和目录名中无效的完整字符集.</ quote>此外,不推荐使用该属性. (3认同)
  • 更多反例:""无效,新的String('x',1024)也无效. (3认同)
  • 应该是 `&lt; 0` 而不是 `&gt;= 0`,因为如果没有找到 `IndexOfAny()` 将返回 -1 (3认同)
  • @shellster您可以通过告诉资源管理器将文件重命名为“ .txt”,在Windows资源管理器中将文件重命名为“ .txt”。只需提示(或“ .txt ........”也可以)。 (2认同)

Phi*_*unt 32

检查GetInvalidFileNameChars():

var isValid = !string.IsNullOrEmpty(fileName) &&
              fileName.IndexOfAny(Path.GetInvalidFileNameChars()) < 0 &&
              !File.Exists(Path.Combine(sourceFolder, fileName));
Run Code Online (Sandbox Code Playgroud)

  • 反例:`"http://www.microsoft.com/"`传递你的测试,但不是有效的文件名,同样适用于`"::::"` (2认同)
  • 哦,我刚刚注意到你使用的是 `GetInvalidFileNameChars`,而不是像 SLaks 那样的 `GetInvalidPathChars`。只要仅测试文件名而不是带路径的文件名,就可以了。 (2认同)

ddy*_*yer 11

如果要创建文件,则应使用文件对话框指定目录路径.有一个简短的文件名非法字符列表.

判断文件名是否可接受的唯一真正可靠的方法是尝试它.权限是一个泥潭.