最简单的方法来检查一个任意的string是一个有效的文件名

在我的应用程序中,用户可以input文件名。 在处理之前,我想检查inputstring是否是Windows Vista上的有效文件名。

最简单的方法是什么?

通过有效,我正在接受合法的和不存在的

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

检查GetInvalidFileNameChars()

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

如果要创build文件,则应使用文件对话框来指定目录path。 有一个文件名非法字符的短列表。

判断一个文件名是否可接受的唯一真正可靠的方法是尝试一下。 权限是一个沼泽。

我使用这个:

 public static bool IsValidFileName(string name) { if(string.IsNullOrWhiteSpace(name)) return false; if(name.Length > 1 && name[1] == ':') { if(name.Length < 4 || name.ToLower()[0] < 'a' || name.ToLower()[0] > 'z' || name[2] != '\\') return false; name = name.Substring(3); } if(name.StartsWith("\\\\")) name = name.Substring(1); if(name.EndsWith("\\") || !name.Trim().Equals(name) || name.Contains("\\\\") || name.IndexOfAny(Path.GetInvalidFileNameChars().Where(x=>x!='\\').ToArray()) >= 0) return false; return true; } 

应该照顾一切,但保留名称,权限和长度限制。 这接受相对和绝对文件名。