2015-02-13 2 views
0

Я хочу получить вид файла по определенному пути - ту же формулировку, которую вы получаете из окна Get Info файла.Тип файла, как показано в файле Get Info

Тогда я могу узнать, является ли это документом, скриптом, двоичным файлом или папкой. Как я могу это сделать?

NSString *path = [@"/Downloads/test.txt"]; 
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&attributesError]; 

ответ

0

Вы можете получить документ вид, как показано в 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 обычный текстовый файл.

Смежные вопросы