রিসোর্স ফোল্ডারে ফাইলগুলির একটি তালিকা পাওয়া - আইওএস Get


85

ধরা যাক আমার আইফোনের অ্যাপ্লিকেশনটির "সংস্থানগুলি" ফোল্ডারে আমার একটি ফোল্ডার রয়েছে যার নাম "ডকুমেন্টস"।

রানার সময় সেই ফোল্ডারে অন্তর্ভুক্ত সমস্ত ফাইলের একটি অ্যারে বা কিছু ধরণের তালিকা পেতে পারি এমন কোনও উপায় আছে কি?

সুতরাং, কোডে, এটি দেখতে দেখতে এমন হবে:

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

দ্রষ্টব্য : বান্ডলে উত্স ফোল্ডার যুক্ত করার পরে নিশ্চিত করুন যে আপনি "অনুলিপি করার সময় কোনও যুক্ত ফোল্ডার বিকল্পের জন্য ফোল্ডার রেফারেন্স তৈরি করুন" নির্বাচন করেছেন


4
মজাদার. সংযোজন ছাড়াই এটি কাজ করে এবং সমস্ত কিছুই খুঁজে পেয়েছে (ডকুমেন্টস ফোল্ডার সহ)। তবে সেই
সংযোজনটির

ওহ অপেক্ষা করুন, "ডকুমেন্টস" একটি ফোল্ডার নয় "গ্রুপ"। এইচএম আমি কীভাবে আমার সংস্থানসমূহ ফোল্ডারে একটি ফোল্ডার যুক্ত করব?
কোডগুয়ে

আপনি Drag & Dropপ্রকল্পে একটি ফোল্ডার করতে পারেন এবং বিষয়বস্তু অনুলিপি করা হবে। অথবা একটি Copy Filesবিল্ড ফেজ যুক্ত করুন এবং এতে অনুলিপি করার জন্য ডিরেক্টরিটি নির্দিষ্ট করুন।
দীপক দণ্ডুপ্রোলু

ঠিক আছে, আমি এটিকে টেনে এনেছি it তবে এটি এখনও মনে করে ডিরেক্টরিটি ফাঁকা। এইচএম
কোডগুই

4
Create folder references for any added foldersঅনুলিপি করার সময় আপনি বিকল্পটি নির্বাচন করেছেন ?
দীপক দণ্ডুপ্রোলু

28

4
ত্রুটি ডোমেন = এনএসকোকাআরআরডোমাইন কোড = 260 "" সংস্থানসমূহ "ফোল্ডারটি বিদ্যমান নেই doesn't" ইউজারআইএনফো = {এনএসফিলপথ = / ভার / পাত্রে / বান্ডেল / অ্যাপ্লিকেশন / এ 367E139-1845-4FD6-9D7F-FCC7A64F0408 / রোবমেড.এপ / রিসোর্স, এনএসউসারস্ট্রিংভিয়ারান্ট = (ফোল্ডার), 0 এক্স1সিডোমাইন 140 এএসসিআরএক্সআন 401 ফাইল বা ডিরেক্টরি "}}
আরগাস

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

আপনি ডিরেক্টরী সামগ্রীগুলিতে একটি অ্যারে বরাদ্দ করছেন যা অবিলম্বে কন্টেন্টঅফডির দ্বারা অ্যারে রিটার্ন দ্বারা ওভাররাইট করা আছে ...
জরিস

আমি যা বোঝাতে চেয়েছি তা হ'ল একটি অ্যারে যা ডিরেক্টরিগুলির বিষয়বস্তু ধারণ করে। অ্যারে আছে কেবল উদাহরণস্বরূপ। আমি এটি সামান্য সম্পাদনা করেছি।
নিউউইনস্টন


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
     }

একটি ডিরেক্টরিতে পুনরাবৃত্তভাবে ফাইলগুলি গণনা করা হচ্ছে

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

এনএসফিলম্যানেজার সম্পর্কে আরও এটির জন্য এখানে


4
এক্সটেনিসনে '' থাকলে তা কাজ করবে না। অন্য কথায়, এটি কাজ করবে: [এনএসপ্রেডিকেট প্রিডিকেট উইথফর্ম্যাট: @ "প্যাথ এক্সটেনশন 'পিএনজি'"]];
লিয়াংজুন

4

সুইফট 3 (এবং ইউআরএল ফিরিয়ে দেওয়া)

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..
}

আমি কি সন্ধান করছিলাম তা বর্ণিত। ধন্যবাদ !!
রোজারস্টোন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.