Getting a list of files in the Resources folder - iOS

前端 未结 7 2136
悲哀的现实
悲哀的现实 2020-11-28 19:52

Let\'s say I have a folder in my \"Resources\" folder of my iPhone application called \"Documents\".

Is there a way that I can get an array or some type of list of a

相关标签:
7条回答
  • 2020-11-28 20:25

    Swift 3 (and returning URLs)

    let url = Bundle.main.resourceURL!
        do {
            let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
        } catch {
            print(error)
        }
    
    0 讨论(0)
  • 2020-11-28 20:26

    You can get the path to the Resources directory like this,

    NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
    

    Then append the Documents to the path,

    NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
    

    Then you can use any of the directory listing APIs of NSFileManager.

    NSError * error;
    NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
    

    Note : When adding source folder into the bundle make sure you select "Create folder references for any added folders option when copying"

    0 讨论(0)
  • 2020-11-28 20:33

    Listing All Files In A Directory

         NSFileManager *fileManager = [NSFileManager defaultManager];
         NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
         NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL
                               includingPropertiesForKeys:@[]
                                                  options:NSDirectoryEnumerationSkipsHiddenFiles
                                                    error:nil];
    
         NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension ENDSWITH '.png'"];
         for (NSString *path in [contents filteredArrayUsingPredicate:predicate]) {
            // Enumerate each .png file in directory
         }
    

    Recursively Enumerating Files In A Directory

          NSFileManager *fileManager = [NSFileManager defaultManager];
          NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
          NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL
                                       includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
                                                         options:NSDirectoryEnumerationSkipsHiddenFiles
                                                    errorHandler:^BOOL(NSURL *url, NSError *error)
          {
             NSLog(@"[Error] %@ (%@)", error, url);
          }];
    
          NSMutableArray *mutableFileURLs = [NSMutableArray array];
          for (NSURL *fileURL in enumerator) {
          NSString *filename;
          [fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil];
    
          NSNumber *isDirectory;
          [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil];
    
           // Skip directories with '_' prefix, for example
          if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) {
             [enumerator skipDescendants];
             continue;
           }
    
          if (![isDirectory boolValue]) {
              [mutableFileURLs addObject:fileURL];
           }
         }
    

    For more about NSFileManager its here

    0 讨论(0)
  • 2020-11-28 20:36

    Swift

    Updated for Swift 3

    let docsPath = Bundle.main.resourcePath! + "/Resources"
    let fileManager = FileManager.default
    
    do {
        let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath)
    } catch {
        print(error)
    }
    

    Further reading:

    • NSFileManager class reference
    • File System Programming Guide
    • Error Handling docs
    • Error Handling in Swift 2.0 blog post
    • How to find the kind of errors a method may throw and catch them in Swift
    0 讨论(0)
  • 2020-11-28 20:36

    You can try this code also:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSError * error;
    NSArray * directoryContents =  [[NSFileManager defaultManager]
                          contentsOfDirectoryAtPath:documentsDirectory error:&error];
    
    NSLog(@"directoryContents ====== %@",directoryContents);
    
    0 讨论(0)
  • 2020-11-28 20:41

    Swift 4:

    If you have to do with subdirs "Relative to project" (blue folders) you could write:

    func getAllPListFrom(_ subdir:String)->[URL]? {
        guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil }
        return fURL
    }
    

    Usage:

    if let myURLs = getAllPListFrom("myPrivateFolder/Lists") {
       // your code..
    }
    
    0 讨论(0)
提交回复
热议问题