Как перебрать все файлы изображений в каталоге? - PullRequest
6 голосов
/ 25 мая 2011

Мое приложение использует общий доступ к файлам 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-предложение, чтобы поймать все возможные типы файлов изображений, и есть десятки из них.

Существует ли более разумный способ действительно собрать все файлы image , независимо от того, являются ли файлы .png, .bmp, .jpg, .jpeg, .jpeg2000, .tiff, .raw, .etc?

Я немного помню, что были какие-то атрибуты файла, которые указывали на общий тип файла. Был какой-то абстрактный ключ изображения, я верю. Но, может быть, есть еще лучший способ?

Ответы [ 2 ]

10 голосов
/ 25 мая 2011

Да, вы можете, просто используйте Унифицированные идентификаторы типов .Вот оно:

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);
5 голосов
/ 25 мая 2011

Даже если имя файла указывает на файл изображения, оно не обязательно должно быть изображением.Вы можете попытаться создать экземпляр UIImage из данных и отклонить файл в случае сбоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...