即使没有文件扩展名,也有办法计算出文件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中不存在。
识别一个没有扩展名且没有其他元数据的文件的唯一方法是查看其内容并基于此识别文件。
如果它是一个图像文件,那么它通常以一些魔术字符串开头,将其标识为JPEG、PNG等。你也可以试着将其作为图像打开,看看它是否有效。
然而,对于文本文件,这种方法不起作用,因为文本文件可以包含任何内容。如果你对文件中的文本有一些了解,你可以将其作为字符串打开,然后在字符串中搜索该文本。如果没有,你可以从字典中查找单词,然后假设它是文本,如果它包含合理数量的字典单词。
如果没有扩展名,你最好只要求用户识别文件类型,这样更容易、更可靠。