Список ВСЕХ файлов на iPhone

в Objective C, как мне получить список ВСЕХ файлов на iPhone?

это вообще возможно или я могу получить файлы только из определенного каталога или известного пути?


person Keil Kelly    schedule 17.08.2011    source источник
comment
Вы сможете получать файлы только в своей песочнице.   -  person Benjamin Mayo    schedule 18.08.2011


Ответы (3)


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

person Marcelo Cantos    schedule 17.08.2011

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

- (NSString *) returnFilePath {
    NSArray *pathArray =
    NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    return [pathArray objectAtIndex:0];
}
person Lokus001    schedule 17.08.2011

Я не уверен, почему люди говорят, что ваше приложение может видеть только определенные файлы внутри вашей песочницы. Начиная с iOS 2.x (последний раз, когда я пробовал что-то подобное), вы можете использовать NSFileManager для отображения файлов практически в любом каталоге. Вот небольшой код для получения всех имен всех файлов в определенном каталоге.

- (NSArray *)allFiles:(NSString *)aPath
    NSMutableArray * listing = [NSMutableArray array];
    NSArray * fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:aPath error:nil];
    if (!fileNames) return listing;
    for (NSString * file in fileNames) {
        NSString * absPath = [aPath stringByAppendingPathComponent:file];
        BOOL isDir = NO;
        if ([[NSFileManager defaultManager] fileExistsAtPath:absPath isDirectory:&isDir]) {
            if (isDir) {
                [listing addObject:absPath];
                [listing addObjectsFromArray:[self allFiles:absPath]];
            } else {
                [listing addObject:absPath];
            }
        }
    }
    return listing;
}

Это пример очень простой рекурсивной функции. Конечно, его можно изменить для более эффективной работы с блоками в качестве обратных вызовов или даже включить NSOperation.

person Alex Nichol    schedule 17.08.2011
comment
Извините, замените startPath (переданный аргумент) на aPath - person Alex Nichol; 21.07.2013