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

如何在iPhone SDK中列出所有文件夹及其子目录/文件?,iphone,ios,cocoa-touch,filesystems,foundation,Iphone,Ios,Cocoa Touch,Filesystems,Foundation,我希望用户选择她/他的iPhone中的任何文件,以便将其用作电子邮件附件。为此,我想显示iPhone中存在的所有文件和文件夹的列表。但是我怎样才能得到这些文件的列表呢?有没有办法获取该列表?请考虑到您的应用程序在沙箱中运行,并且无法获取沙箱之外的任何文件夹/文件 目的 斯威夫特4 以下是最慢的方法: NSFileManager * fileManager = [NSFileManager new]; NSArray * subpaths = [fileManager subpathsAtPath

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

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

目的

斯威夫特4


以下是最慢的方法:

NSFileManager * fileManager = [NSFileManager new];
NSArray * subpaths = [fileManager subpathsAtPath:path];
但这至少应该为您的需求指出一个更专门的实现

允许您按需枚举的级别稍低的抽象包括NSDirectoryEnumerator和CFURLEnumerator。根据目录的深度,与-[NSFileManager子路径:]相比,它们有可能节省与文件系统的许多不必要的交互。

您可以通过以下方式使用NSDirectoryEnumerator

从文档中:

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]];
    }
}
我是control的作者,它是iOS的文件浏览器,可以满足您的大多数要求。请注意,它只允许您浏览放置在沙箱中的文件和目录

以下是我的控件的一些功能:

如果需要,可以选择文件或/和目录 如果需要,可以删除文件或/和目录 内置搜索功能 查看音频、视频、图像和PDF文件。 可以添加对任何文件类型的支持。 您可以找到我的控制按钮。

swift 3

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

但例如,我在iPhone的硬盘中有一个.pdf文件,我想找到该文件,或者想得到该文件的路径,而不是???不能将所有文件都存储在应用程序沙箱中。您可以告诉系统您的应用程序支持PDF,并允许其他应用程序发送您的应用程序PDF。没有其他方法可以做到这一点。请在第二行中提到变量path的值好吗?@Muhammed好吧,您无法访问文件系统中的任何文件,因为它是沙盒文件。您确实可以访问应用程序的本地数据-simpleBob的documentsDirectory演示了如何获得该路径。感谢您的回复,这只是一个小小的困惑。如果我的文件存在于iPhone的“照片”文件夹中怎么办。我可以访问它吗?我的意思是,我可以列出照片文件夹中的所有文件吗?@Muhammed Saqib不客气。对于这些共享映像,可以使用AssetLibrary.framework。
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]];
    }
}
    let fileManager:FileManager = FileManager()
    let files = fileManager.enumerator(atPath: NSHomeDirectory())
    while let file = files?.nextObject() {
        print("Files::",file)
    }