Как получить файл UTI, когда файл не имеет расширения? - PullRequest
5 голосов
/ 26 мая 2011

Есть ли способ выяснить UTI файла (унифицированный идентификатор типа), даже если расширение файла отсутствует?

Прямо сейчас я получаю это так, когда файл имеет расширение:

CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[file pathExtension], NULL);

Я нашел этот фрагмент в сети, который предназначен для Mac. Но я в iOS:

CFStringRef typeString = UTCreateStringForOSType(outInfo.filetype);
itemUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, typeString, NULL);
CFRelease( typeString );

Примечание: outInfo имеет тип LSItemInfoRecord, которого нет в iOS.

1 Ответ

1 голос
/ 23 апреля 2012

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

Если это файл изображения, то он обычно начинается с некоторой магической строки, которая идентифицирует его как JPEG, PNG и т. Д. Вы также можете просто попытаться открыть его как изображение и посмотреть, работает ли он.

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

Возможно, вам лучше попросить пользователя указать тип файла, если расширение отсутствует - это проще и надежнее.

...