Подтвердить что ты не робот

Самый простой способ проверить, является ли произвольная String допустимым именем файла

В моем приложении пользователь может ввести имя файла. Перед обработкой я хотел бы проверить, является ли входная строка корректным именем файла в Windows Vista.

Самый простой способ сделать это?

В действительности я возвращаюсь к юридическим и несуществующим

4b9b3361

Ответ 1

Убедитесь, что filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 и !File.Exists(Path.Combine(someFolder, filename))

Ответ 2

Откажитесь от GetInvalidFileNameChars():

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

Ответ 3

Если файл будет создан, вы должны использовать диалог файла, чтобы указать путь к каталогу. Там короткий список недопустимых символов для имен файлов.

Единственный надежный способ узнать, допустимо ли имя файла, - попробовать его. права доступа является болотом.

Ответ 4

Я использую это:

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

Следует заботиться обо всех, кроме зарезервированных имен, разрешений и ограничений длины. Это принимает как относительные, так и абсолютные имена файлов.