Самый простой способ проверить, является ли произвольная строка допустимым именем файла
в моем приложении пользователь может ввести имя файла. Перед обработкой я хотел бы проверить, является ли входная строка допустимым именем файла в Windows Vista.
что самый простой способ сделать это?
по валидности я отношусь к легальным и несуществующим
5 ответов:
проверить, является ли
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));
Если файл будет создан, Вы должны использовать диалоговое окно, чтобы указать путь к папке. Есть короткий список запрещенных символов для имен файлов.
единственный действительно надежный способ, чтобы сказать, если имя файла является приемлемым, чтобы попробовать его. Разрешения - это болото.
Я использую этот:
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; }
следует позаботиться обо всем, кроме зарезервированных имен, разрешений и ограничений длины. Это принимает как относительные, так и абсолютные имена файлов.