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

时间:2011-01-10 19:07:17

标签: c# .net file

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

最简单的方法是什么?

通过有效我正在考虑合法和不存在的

5 个答案:

答案 0 :(得分:111)

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

答案 1 :(得分:29)

检查GetInvalidFileNameChars()

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

答案 2 :(得分:12)

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

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

答案 3 :(得分:1)

我用这个:

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;
}

应该处理除保留名称,权限和长度限制之外的所有内容。它接受相对和绝对文件名。

答案 4 :(得分:0)

这只是一个想法。应该填写例外列表:

finishAfterTransition()