Как определить тип файла (тип документа/UTI) файла

Я работаю над приложением для документов. Мой документ на самом деле представляет собой пакет, который может содержать другие произвольные документы. Когда мой документ загружается, я могу получить доступ ко всем этим файлам с помощью NSFileWrapper API. Я хочу знать, какой файл представляют эти объекты NSFileWrapper, чтобы я знал, как показать его в своем приложении. Это текстовый файл, изображение или какой-то двоичный файл?

Есть ли способ получить UTI NSFileWrapper? Я нашел свойство «значок» в NSFileWrapper из AppKit. Таким образом, у них должен быть какой-то способ узнать, что это за файл, чтобы иметь возможность найти его значок.


person D.C.    schedule 29.06.2015    source источник
comment
Возможно, это приведет вас в правильном направлении: stackoverflow.com/questions/5814463/   -  person Jteve Sobs    schedule 29.06.2015
comment
Красиво, это то, что я искал. Спасибо. перейти к ответу?   -  person D.C.    schedule 30.06.2015


Ответы (1)


Вы можете запросить у NSWorkspace UTI любого файла:

import Cocoa

let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
  .UserDomainMask, true)[0] as! String

let documentPath = documents.stringByAppendingPathComponent("test.pages")
  // test.pages will need to exist on the filesystem

NSWorkspace.sharedWorkspace().typeOfFile(documentPath, error: nil)
  // com.apple.iwork.pages.sffpages

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

Документация рекомендует проверять NSError, но не говорит, какие ошибки могут возникнуть.

person Abhi Beckert    schedule 29.06.2015
comment
Спасибо, это похоже на хорошее решение. Поскольку я работаю с NSFileWrappers, я думаю, что у меня нет полного пути для использования с этим API. Так что функции UTI в комментарии выше кажутся более подходящими для моей задачи. - person D.C.; 30.06.2015
comment
@darren Я почти уверен, что это единственное решение, поэтому вам придется найти способ заставить его работать. Если у вас есть NSDocument, вы можете использовать его для определения URL-адреса/пути к файловой оболочке через него. В качестве альтернативы вы можете создать файл или папку в /tmp с тем же именем, что и файловая оболочка, а затем спросить NSWorkspace, какой это тип. - person Abhi Beckert; 30.06.2015