Вы можете получить документ вид, как показано в Finder, используя такой код:
NSURL* url = [NSURL fileURLWithPath:path];
NSString* documentKind;
NSError* error;
if ([url getResourceValue:&documentKind forKey:NSURLLocalizedTypeDescriptionKey error:&error])
{
// use documentKind here
}
else
{
/* handle error */
}
Однако, документ рода не подходит для принятия программных решений. Во-первых, как должно быть ясно, оно локализовано. Это означает, что он может измениться на основе системного языка. Он также может изменяться с разными версиями ОС (для системных типов документов) или приложений (для определенных приложений).
Если вы хотите принять программные решения о файлах, вы должны использовать Uniform Type Identifier. Чтобы получить это, вы можете использовать код, аналогичный приведенному выше, за исключением использования ключа NSURLTypeIdentifierKey
. Вы также можете использовать -[NSWorkspace typeOfFile:error:]
, чтобы получить этот тип с заданным путем.
Для сравнения UTIs, вы, как правило, не должны использовать равенство строк. Вместо этого вы должны использовать -[NSWorkspace type:conformsToType:]
, чтобы узнать, соответствует ли файл UTI тому, который вас интересует в некотором роде. Таким образом, если тип файла является более конкретным вариантом того, который вы обрабатываете, вы все равно будете обрабатывать его таким образом. Например, если вы обрабатываете определенным образом и вы сталкиваетесь с файлом типа public.objective-c-source
, вы все равно будете обрабатывать его, потому что он is-a обычный текстовый файл.