2012-06-08 4 views
0

Я работаю с файлами, формат содержимого которых изменился на несколько версий OSX, ранее это был ASCII, а затем JSON, теперь являющийся бинарным plist. Поэтому мне нужно определить, какой файл он есть, поэтому я могу разобрать его либо как текст, используя API JSON, либо загрузить plist в качестве словаря/массива.Программно определить тип содержимого файла в OSX

Я могу использовать команду/usr/bin/file, чтобы указать тип содержимого файла, но я бы предпочел сделать это программно. Для этого существует API Cocoa?

Я просмотрел атрибуты NSFileManagerOfItemAtPath: ошибка: но это просто возвращает NSFileTypeRegular, что не помогает.

ответ

1

Нет API-интерфейса Cocoa, который соответствует файлу. Существует множество различных API-интерфейсов Cocoa (и CF), которые имеют дело с «типами файлов», но они используют гибрид расширений и информацию о классическом Mac Finder, чего вы не хотите.

Что вы хотите - это libmagic, как предлагает H2CO3. Но вы хотите версию BSD. Это часть источника Fine Free File Command, тот же источник, из которого вышла встроенная команда OS X, и она лицензирована BSD, и она обновляется чаще.

Вы можете получить его на http://www.darwinsys.com/file/, но он также доступен на домашнем компьютере или в MacPorts.

+0

Спасибо за это, это выглядит гораздо более перспективным, чем ссылка на исходную ковку. Я надеялся избежать зависимости, но этого должно быть достаточно. Благодарю. – brianpartridge

0

Это может вам помочь: http://sourceforge.net/projects/libmagic/ Вот страница man для Libmagic на Linux; так как это не совсем OS-зависимая библиотека, это, скорее всего, будет работать без изменений и для Mac. См. http://linux.die.net/man/3/libmagic

+0

К сожалению, проект выглядит заброшенным и нетронутым с 2000 года. Лицензия GPL заставляет меня ошибиться, поскольку я, возможно, когда-нибудь буду частью продукта. Я надеялся на метод Cocoa, который просто использовал бы тот же код, что и команда «файл». – brianpartridge

+0

Er, команда 'file' использует только что предоставленную библиотеку ... –

+1

@brianpartridge: Где вы получаете «заброшенные и нетронутые с 2000 года» со страницы с надписью «Последнее обновление 2009-07-17»? – abarnert

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