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

Ios 在objective c中,如何在不知道扩展名的情况下获取文件类型?,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有一个没有扩展名的文件,我需要知道它是什么类型的文件。例如,给定一个文件的路径,我想知道该文件是图像、电影还是文本文件 这可能吗 请注意,这是一款iOs应用程序 提前谢谢 这取决于文件格式。通过检查文件的开头,可以很容易地识别某些文件格式。但有些文件类型只有通过检查文件扩展名才能知道。因此,实现这一点的唯一方法是,如果您有一个有限的已知文件格式列表,并且您可以找到有关如何识别它们的文档。好的,您可以很粗暴地按照简单/可能的顺序检查一些特征,例如: 试着把它读成文本-你有可读的字符吗?可能 文本

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

这可能吗

请注意,这是一款iOs应用程序


提前谢谢

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

好的,您可以很粗暴地按照简单/可能的顺序检查一些特征,例如:

试着把它读成文本-你有可读的字符吗?可能 文本文件。 尝试使用数据创建UIImage-Dos是 工作那就是一个图像。 尝试将文件放入视频播放器中- 它演奏吗?然后是视频。

:-

我会考虑使用。由于UTI被组织成层次结构,一种可能性是检查给定文件的首选UTI是否符合顶级UTI,例如,public.image for images或public.movie for movies等

例如,处理文件扩展名:

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。

我怀疑是否有用于此的API。。。在这种情况下,您需要打开文件并检查其内容,以尝试生成最佳猜测。查找*nix file命令的源代码,以查看执行您正在查找的代码。该文件是否没有扩展名,或者您是否不知道扩展名是什么?@drowness我确实有扩展名,但可能是错误的。因此,我需要知道扩展名是否与文件类型匹配:。谢谢请NSFileManager为您提供目录中的文件列表,并查看与您的名称匹配的文件。在iOS上,文件扩展名和内容类型之间的关系非常牢固。如果你知道这个扩展,你就会非常了解内容类型。是的,这就是我目前正在做的,它正在工作。我只是想知道是否有更好的方法。谢谢已经试过了,运气不好。。在发布此问题之前找到解决方案。。。记住我没有文件扩展名。无论如何谢谢你@Omer-但如果扫描目录,您可以找到扩展名。@HotLicks不,该文件没有扩展名,即:../Documents/myFile-您也可以认为该文件的扩展名与文件类型不可靠。许多文件都遵循UNIX内部文件标识协议。基本上在前10个字符左右是一个2-3个字符的ID。但是我不记得细节。其他的你可以弄清楚。例如,JPEG将始终启动FF D8 FF。