如何在iPhone SDK中列出所有文件夹及其子目录/文件?

Muh*_*qib 10 filesystems iphone cocoa-touch foundation ios

我希望用户选择她/他的iPhone中存在的任何文件,以便将其用作电子邮件附件.为此,我想显示iPhone中存在的所有文件和文件夹的列表.但是我如何获得这些文件的列表?有没有办法获得该名单?

Dan*_*iel 18

考虑到您的应用程序在沙箱中运行,并且无法获取该沙箱之外的任何文件夹/文件.

的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);
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特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)
}
Run Code Online (Sandbox Code Playgroud)


jus*_*tin 5

这是最慢的(?)方法:

NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];
Run Code Online (Sandbox Code Playgroud)

但这至少应该指向一个更专业的实现来满足您的需求.

稍微低一点的抽象,允许您按需枚举包括NSDirectoryEnumeratorCFURLEnumerator.与...相比,根据目录的深度,它们有可能与文件系统保存很多不必要的交互-[NSFileManager subpathsAtPath:].