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

我希望用户select任何存在于他/她的iPhone中的文件,以便它被用作电子邮件附件。 为此,我想显示iPhone中存在的所有文件和文件夹的列表。 但是,我将如何获得这些文件的列表? 有没有办法得到这个清单?

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

的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); } 

斯威夫特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) } 

这是最慢的(?)方法:

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

但至less应该指出一个更专门的实现来满足您的需求。

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

你可以通过NSFileManager.enumeratorAtPath使用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]]; } } 

我是FileExplorer控件的作者,它是iOS的文件浏览器,可满足您的大部分要求。 请注意,它允许您仅浏览放置在沙盒中的文件和目录。

以下是我的控制function的一些:

  1. 如果需要,可以select文件或/和目录
  2. 如果需要删除文件或/和目录的可能性
  3. 内置searchfunction
  4. 查看audio,video,图像和PDF文件。
  5. 可以添加对任何文件types的支持。

你可以在这里find我的控制。

迅速3

  let fileManager:FileManager = FileManager() let files = fileManager.enumerator(atPath: NSHomeDirectory()) while let file = files?.nextObject() { print("Files::",file) }