繁体   English   中英

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

[英]How to iterate over all image files in a directory?

我的应用程序使用 iTunes 文件共享。 用户可以将文件添加到 Documents 目录。

我必须阅读这些文件,但要确保它们只是图像而不是文本文件或其他“垃圾”。

如何遍历目录中的文件并仅识别那些是图像的文件?

我认为我必须以某种方式这样做:

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 子句来捕获所有可能的图像文件类型,并且有几十个。

有没有更智能的方法来真正收集所有图像文件,无论是.png、.bmp、.jpg、.jpeg、.jpeg2000、.tiff、.raw、.etc?

我稍微记得有一些文件属性可以告诉文件的一般类型。 我相信有一些抽象的图像键。 但也许有更好的方法?

是的,您可以,只需使用Uniform Type Identifiers 这里是:

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);

即使文件名暗示一个图像文件,它也不一定是图像。 您可以尝试从数据中实例化UIImage并在失败时拒绝该文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM