संसाधन फ़ोल्डर में फ़ाइलों की एक सूची प्राप्त करना - आईओएस


85

मान लीजिए कि मेरे iPhone एप्लिकेशन के "संसाधन" फ़ोल्डर में "दस्तावेज़" नामक एक फ़ोल्डर है।

क्या कोई तरीका है जिससे मुझे रन समय में उस फ़ोल्डर में शामिल सभी फ़ाइलों की एक सरणी या किसी प्रकार की सूची मिल सकती है?

तो, कोड में, ऐसा लगेगा:

NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];

क्या यह संभव है?

जवाबों:


139

आप Resourcesइस तरह निर्देशिका के लिए पथ प्राप्त कर सकते हैं ,

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

फिर Documentsपथ के लिए संलग्न करें ,

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

तब आप किसी भी निर्देशिका API का उपयोग कर सकते हैं NSFileManager

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

नोट : बंडल में स्रोत फ़ोल्डर जोड़ते समय सुनिश्चित करें कि आप "कॉपी करते समय किसी भी जोड़े गए फ़ोल्डर विकल्प के लिए फ़ोल्डर संदर्भ बनाएँ" का चयन करें


2
दिलचस्प। एप्‍लिकेशन के बिना इसने काम किया और सब कुछ पाया (डॉक्यूमेंट्स फोल्‍डर सहित)। लेकिन उस परिशिष्ट के साथ, "
DirectoryOfContents

ओह रुको, "दस्तावेज़" एक "समूह" है जो एक फ़ोल्डर नहीं है। एचएम। मैं अपने संसाधन फ़ोल्डर में एक फ़ोल्डर कैसे जोड़ूं?
कोडगुई

आप Drag & Dropप्रोजेक्ट पर एक फ़ोल्डर और सामग्री की नकल कर सकते हैं। या एक Copy Filesबिल्ड चरण जोड़ें और निर्देशिका को उसमें कॉपी करने के लिए निर्दिष्ट करें।
दीपक दंडुपोलु

ठीक है, मैंने इसे अंदर खींच लिया, लेकिन यह अभी भी सोचता है कि निर्देशिका खाली है। एचएम।
कोडग्य

4
क्या आपने Create folder references for any added foldersकॉपी करते समय विकल्प का चयन किया था ?
दीपक दंडुपोलु

27

4
त्रुटि डोमेन = NSCocoaErrorDomain कोड = 260 "फ़ोल्डर" संसाधन "मौजूद नहीं है।" UserInfo = {NSFilePath = / var / कंटेनरों / बंडल / अनुप्रयोग / A367E139-1845-4FD6-9D7F-FCC7A64F0408 / Robomed.app / संसाधन, NSserserStringVariant = (फ़ोल्डर), NSUnderlyingError = 0x4c440740540440540404 फ़ाइल या निर्देशिका "}}
Argus

18

आप इस कोड को भी आज़मा सकते हैं:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError * error;
NSArray * directoryContents =  [[NSFileManager defaultManager]
                      contentsOfDirectoryAtPath:documentsDirectory error:&error];

NSLog(@"directoryContents ====== %@",directoryContents);

आप DirectoryContents में एक सरणी आवंटित कर रहे हैं, जो तुरंत एक सरणी रिटर्न द्वारा
लिखी

मैं जो दिखाने का मतलब था वह केवल एक सरणी थी जो निर्देशिका की सामग्री को धारण करेगी। सरणी केवल उदाहरण के लिए है। मैंने इसे थोड़ा संपादित किया है।
नेविन्स्टन

15

स्विफ्ट संस्करण:

    if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){
        for file in files {
            print(file)
        }
    }

7

एक निर्देशिका में सभी फाइलों को सूचीबद्ध करना

     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
     }

एक निर्देशिका में पुनरावर्ती Enumerating फ़ाइलें

      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];
       }
     }

NSFileManager के बारे में अधिक इसके लिए यहाँ


3
यह काम नहीं करेगा अगर एक्सटेंसन के पास '' है। दूसरे शब्दों में, यह काम करेगा: [NSPredicate predicateWithFormat: @ "pathExtension ENDSWITH 'png'"];
लियांगजुन

4

स्विफ्ट 3 (और URL लौटाते हुए)

let url = Bundle.main.resourceURL!
    do {
        let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
    } catch {
        print(error)
    }

3

स्विफ्ट 4:

यदि आपको "प्रोजेक्ट के सापेक्ष" (नीले फ़ोल्डर) के उपखंडों के साथ करना है तो आप लिख सकते हैं:

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

उपयोग :

if let myURLs = getAllPListFrom("myPrivateFolder/Lists") {
   // your code..
}

मैं क्या देख रहा था Exaclty। धन्यवाद !!
रेजरस्टोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.