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