Я хочу, чтобы пользователь мог выбрать любой файл, присутствующий на своем iPhone, чтобы он использовался как вложение электронной почты. Для этого я хочу показать список всех файлов и папок, присутствующих в iPhone. Но как мне получить список этих файлов? Есть ли способ получить этот список?
Как перечислить все папки и их подкаталоги/файлы в iPhone SDK?
Ответ 1
Учтите, что ваше приложение работает в изолированной программной среде и не сможет получить какую-либо папку/файл за пределами этой изолированной программы.
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)
}
Ответ 2
Здесь самый медленный (?) подход:
NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];
но это должно по крайней мере указывать на более специализированную реализацию для ваших нужд.
Несколько абстракции нижнего уровня, которые позволяют вам перечислять по запросу, включают NSDirectoryEnumerator
и CFURLEnumerator
. В зависимости от глубины каталога они могут сэкономить много ненужных взаимодействий с файловой системой по сравнению с -[NSFileManager subpathsAtPath:]
.
Ответ 3
Вы можете использовать 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]];
}
}
Ответ 4
swift 3
let fileManager:FileManager = FileManager()
let files = fileManager.enumerator(atPath: NSHomeDirectory())
while let file = files?.nextObject() {
print("Files::",file)
}
Ответ 5
Я являюсь автором FileExplorer, который является файловым браузером для iOS и выполняет большинство ваших требований. Обратите внимание, что он позволяет просматривать только те файлы и каталоги, которые помещаются в вашу изолированную среду.
Вот некоторые из моих возможностей:
- Возможность выбора файлов и/или каталогов, если есть необходимость в этом
- По возможности для удаления файлов и/или каталогов, если есть необходимость в этом
- Встроенная функция поиска
- Просмотр файлов аудио, видео, изображений и PDF.
- Возможность добавления поддержки для любого типа файла.
Вы можете найти мой элемент управления здесь.