如何在不知道目标c中的扩展名的情况下获取文件类型?

时间:2014-02-19 22:23:31

标签: ios objective-c cocoa-touch

我有一个没有扩展名的文件,我需要知道它是什么类型的文件。例如,给定文件的路径,我想知道文件是图像,电影还是文本文件。

这可能吗?

对于记录,这是针对iOs应用程序。

提前致谢!

3 个答案:

答案 0 :(得分:1)

嗯,你可能是粗野的,只是按照简单/可能性的顺序检查一些特征,如:

  1. 尝试将其作为文字阅读 - 你会得到可读的字符吗?大概 一个文本文件。
  2. 尝试使用数据创建UIImage - 确实如此 工作?然后是一张图片。
  3. 尝试将文件放入视频播放器 - 它发挥了吗?那是一段视频。
  4. : - )

答案 1 :(得分:0)

这取决于文件格式。通过检查文件格式的开头,可以轻松识别某些文件格式。但是只有通过检查文件扩展名才能知道某些文件类型。因此,唯一的方法是,如果您有一个文件可能已知格式的有限列表,并找到有关如何识别它们的文档。

答案 2 :(得分:-1)

我会考虑使用Uniform Type Identifiers。由于UTI被组织成层次结构,因此一种可能性是检查给定文件的优选UTI是否符合顶级UTI,例如, public.image用于图片,public.movie用于电影等。

因此,例如处理文件扩展名:

NSString *file = @"…"; // path to some file
CFStringRef fileExtension = (CFStringRef) [file pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);

if (UTTypeConformsTo(fileUTI, kUTTypeImage)) NSLog(@"It's an image");
else if (UTTypeConformsTo(fileUTI, kUTTypeMovie)) NSLog(@"It's a movie");
else if (UTTypeConformsTo(fileUTI, kUTTypeText)) NSLog(@"It's text");

CFRelease(fileUTI);

如果你有MIME类型而不是文件扩展名,则可以使用kUTTagClassMIMEType代替kUTTagClassFilenameExtension