В настоящее время я работаю с некоторым кодом, включающим сохранение файла в файл, определенный пользователем. Если пользователь передает имя файла без расширения, код автоматически определяет расширение на основе типа файла (хранящегося внутри).
Однако мне трудно определить, имеет ли имя файла, переданное в код, расширение или нет. I Я использую Path.HasExtension (filename)
и Path.GetExtension (filename)
, но, похоже, демонстрирует странное поведение:
File.EXT
=> .EXT
- это расширение. Это нормально.
Это файл.EXT
=> .EXT
- это расширение. Это тоже нормально.
Это Файл. Не расширение
=> . Не расширение
- это расширение. Однако я бы подумал об этом как о файле без расширения.Windows тоже так думает, когда я создаю файл с этим именем (создание файла с нераспознанным расширением заставляет окна называть его EXTENSIONNAME File
, тогда как файлы без такого расширения, как это, просто называются Файл
).
Это файл. Не расширение
=> . Не расширение
- это расширение. Та же проблема, что и выше.
Также обратите внимание, что такое же поведение очевидно в Path.GetFileNameWithoutExtension (filename)
(например, в двух последних примерах указано, что имя файла без расширения будет просто This Is A File
).
Итак, я понимаю, что .NET и Windows отличаются тем, что они считают расширением.
Вопрос: Мне интересно, можно ли мне реализовать такой код:
if (! Path.HasExtension (filename) || Path.GetExtension (filename) .Contains ("")) {...}
, поскольку это приведет к тому, что определение правильного расширения в моем коде будет больше соответствовать тому, как Windows обрабатывает вещи. Или мне здесь не хватает чего-то, что явно говорит о том, что я должен разрешить пробелы в своих расширениях?
Я искал и нашел этот немного похожий вопрос , но связанные документы в нем только укажите, что не рекомендуется заканчивать расширение пробелом / точкой - они ничего не говорят о пробелах внутри расширения.