Как вывести список всех папок и их подкаталогов / файлов в iPhone SDK? - PullRequest
10 голосов
/ 26 октября 2011

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

Ответы [ 5 ]

18 голосов
/ 26 октября 2011

Учтите, что ваше приложение работает в изолированной программной среде и не сможет получить какую-либо папку / файл за пределами этой изолированной программной среды.

ObjectiveC

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];

NSFileManager *manager = [NSFileManager defaultManager];
NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
for (NSString *s in fileList){
    NSLog(@"%@", s);
}

Swift 4

guard let documentsDirectory =  try? FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) else { return }
guard let fileEnumerator = FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) else { return }
while let file = fileEnumerator.nextObject() {
    print(file)
}
5 голосов
/ 26 октября 2011

Вот самый медленный (?) Подход:

NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];

но это должно, по крайней мере, указать вам на более специализированную реализацию для ваших нужд.

Немного более низкие уровни абстракций, которые позволяют вам перечислять по требованию, включают NSDirectoryEnumerator и CFURLEnumerator. В зависимости от глубины каталога, они могут сохранить много ненужных взаимодействий с файловой системой, по сравнению с -[NSFileManager subpathsAtPath:].

3 голосов
/ 13 июля 2015

Вы можете использовать NSDirectoryEnumerator через NSFileManager.enumeratorAtPath

Из документов:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:  @"Documents"];
NSFileManager *localFileManager=[[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum =
    [localFileManager enumeratorAtPath:docsDir];

NSString *file;
while ((file = [dirEnum nextObject])) {
    if ([[file pathExtension] isEqualToString: @"doc"]) {
        // process the document
        [self scanDocument: [docsDir stringByAppendingPathComponent:file]];
    }
}
2 голосов
/ 06 сентября 2017

Свифт 3

    let fileManager:FileManager = FileManager()
    let files = fileManager.enumerator(atPath: NSHomeDirectory())
    while let file = files?.nextObject() {
        print("Files::",file)
    }
1 голос
/ 29 ноября 2016

Я являюсь автором FileExplorer элемента управления, который является файловым браузером для iOS и удовлетворяет большинству ваших требований.Обратите внимание, что он позволяет просматривать только те файлы и каталоги, которые находятся внутри вашей песочницы.

Вот некоторые функции моего элемента управления:

  1. Возможность выбора файлов или /и каталоги, если в этом есть необходимость
  2. Возможность удаления файлов и / или каталогов, если в этом есть необходимость
  3. Встроенная функция поиска
  4. Просмотр аудио,Файлы видео, изображений и PDF.
  5. Возможность добавления поддержки для файлов любого типа.

Мой элемент управления можно найти здесь .

...