How to list all folders and their subdirectories/files in iPhone SDK?

后端 未结 5 1390
野趣味
野趣味 2020-12-14 12:00

I want the user to select any file present in her/his iPhone so that it’s used as an e-mail attachment. For this purpose, I want to show the list of all files and folders pr

相关标签:
5条回答
  • 2020-12-14 12:43

    You can use NSDirectoryEnumerator via NSFileManager.enumeratorAtPath

    From the docs:

    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]];
        }
    }
    
    0 讨论(0)
  • 2020-12-14 12:47

    I'm an author of FileExplorer control which is a file browser for iOS and fulfills most of your requirements. Note that it allows you to browse only those files and directories that are placed inside your sandbox.

    Here are some of the features of my control:

    1. Possibility to choose files or/and directories if there is a need for that
    2. Possiblity to remove files or/and directories if there is a need for that
    3. Built-in search functionality
    4. View Audio, Video, Image and PDF files.
    5. Possibility to add support for any file type.

    You can find my control here.

    0 讨论(0)
  • 2020-12-14 12:54

    swift 3

        let fileManager:FileManager = FileManager()
        let files = fileManager.enumerator(atPath: NSHomeDirectory())
        while let file = files?.nextObject() {
            print("Files::",file)
        }
    
    0 讨论(0)
  • 2020-12-14 13:02

    Here's the slowest(?) approach:

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

    but that should at least point you to a more specialized implementation for your needs.

    Slightly lower level abstractions which allow you to enumerate on demand include NSDirectoryEnumerator and CFURLEnumerator. Depending on the depth of the directory, these have the potential to save much unnecessary interactions with the filesystem, compared to -[NSFileManager subpathsAtPath:].

    0 讨论(0)
  • 2020-12-14 13:03

    Take into account that your app runs in a sandbox and would not be able to get any folder/file outside of that sandbox.

    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)
    }
    
    0 讨论(0)
提交回复
热议问题