Подтвердить что ты не робот

Objective-C получить список файлов и подпапок в каталоге

Каков трюк, чтобы получить список массивов полных путей файлов/папок из заданного каталога? Я ищу поиск заданного каталога для файлов, заканчивающихся на .mp3, и вам нужно полное имя пути, которое включает имя файла.

NSArray* dirs = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sourcePath error:Nil];

NSArray* mp3Files = [dirs filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.mp3'"]];

это возвращает имя файла, а не путь

4b9b3361

Ответ 1

Вероятно, лучше всего перечислить массив, используя блок, который можно использовать для конкатенации пути и имени файла, для тестирования любого расширения файла, которое вы хотите:

NSArray* dirs = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sourcePath
                                                                    error:NULL];
NSMutableArray *mp3Files = [[NSMutableArray alloc] init];
[dirs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *filename = (NSString *)obj;
    NSString *extension = [[filename pathExtension] lowercaseString];
    if ([extension isEqualToString:@"mp3"]) {
        [mp3Files addObject:[sourcePath stringByAppendingPathComponent:filename]];
    }
}];

Ответ 2

Чтобы использовать предикат для URL-адресов, я бы сделал это следующим образом:

NSURL *bundleRoot = [[NSBundle mainBundle] bundleURL];
NSArray * dirContents = 
      [fm contentsOfDirectoryAtURL:bundleRoot
        includingPropertiesForKeys:@[] 
                           options:NSDirectoryEnumerationSkipsHiddenFiles
                             error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension='.mp3'"];
NSArray *mp3Files = [directoryContents filteredArrayUsingPredicate:predicate];

Этот вопрос может быть дубликат: Получение списка файлов в каталоге с глобусом

Существует также объект NSDirectoryEnumerator, который отлично подходит для итерации через файлы в каталоге.