如何遍历目录中的所有图像文件?

问题描述

| 我的应用程序使用iTunes文件共享。用户可以将文件添加到“文档”目录。 我必须阅读这些文件,但要确保它们只是图像,而不是文本文件或其他“垃圾”。 如何遍历目录中的文件并仅识别图像文件? 我以为我必须这样做:
NSMutableArray *retval = [NSMutableArray array];

NSArray *files = [fileManager contentsOfDirectoryAtPath:documentsDirPath error:&error];
if (files == nil) {
    // error...
}

for (Nsstring *file in files) {
    if ([file.pathExtension compare:@\"png\" options:NSCaseInsensitiveSearch] == NSOrderedSame) {        
        Nsstring *fullPath = [documentsDirPath stringByAppendingPathComponent:file];
        [retval addobject:fullPath];
    }
}
但这出于某些原因是不好的。我需要一个HUUUUUGE if子句来捕获所有可能的图像文件类型,并且它们都有DOZENS。 是否存在一种更智能的方式来真正收集所有图像文件,而不管是否是.png,.bmp,.jpg,.jpeg,.jpeg2000,.tiff,.raw等。 我稍微记得,有些文件属性告诉了文件的一般类型。我相信有一些抽象图像键。但是也许还有更好的方法?     

解决方法

是的,您可以使用统一类型标识符。这里是:
NSString *file = @\"…\"; // path to some file
CFStringRef fileExtension = (CFStringRef) [file pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,fileExtension,NULL);

if (UTTypeConformsTo(fileUTI,kUTTypeImage)) NSLog(@\"This is an image\");

CFRelease(fileUTI);
    ,即使文件名建议使用图像文件,也不必一定是图像。您可以尝试从数据中实例化一个“ 2”,如果文件失败则拒绝该文件。