दिलचस्प पोस्ट
यह निर्धारित करने के लिए कि क्या द्विआधारी पेड़ संतुलित है? HTML स्रोत तक पहुंचने वाले पायथन सेलिनियम सीएसएस: नहीं () चयनकर्ता को दूर के वंशज के साथ काम करना चाहिए? डायनेमिक कोड निष्पादन डॉट (।) ऑपरेटर और -> सी ++ में अंतर क्या है? मैं कैसे tastypie का उपयोग कर django में प्रवेश कर सकते हैं विंडोज पर चल रहे एमएक्स के लिए मेरी .emac फाइल कहां मिल सकती है? एक जावास्क्रिप्ट संपत्ति के भीतर एक रेल सहायक पद्धति का उपयोग करना जावा त्रुटि: केवल एक प्रकार का आयात किया जा सकता है XYZ एक पैकेज को हल करता है मैं सी में निष्पादन योग्य का स्थान कैसे प्राप्त करूं? डीबग संदेश "संसाधन अन्य के रूप में व्याख्या किया गया है लेकिन माइम प्रकार के आवेदन / जावास्क्रिप्ट के साथ स्थानांतरित" कैसे जावा एटिल से बचें। कॉन्ट्रैक्टमोडिफिकेशन अपेशन जब किसी अररियलिस्ट से तत्वों को निकालते और निकालते हैं विशेषता और संपत्ति के बीच अंतर क्या है? कोणीय जेएस में एकाधिक मान (या ऑपरेशन) कैसे फ़िल्टर करें क्यों करता है (यह वास्तव में?) सूची <T> इन सभी इंटरफेस को लागू करें, न केवल IList <T>?

एक ग्लोब के साथ एक निर्देशिका में फ़ाइलों की सूची प्राप्त करना

कुछ पागल कारणों के लिए मुझे दी गई निर्देशिका के लिए एक ग्लोब के साथ फाइलों की सूची प्राप्त करने का कोई तरीका नहीं मिल सकता है

मैं वर्तमान में इस प्रकार से कुछ के साथ अटक गया हूं:

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; NSArray *dirContents = [[NSFileManager defaultManager] directoryContentsAtPath:bundleRoot]; 

..और फिर सामान जो मैं नहीं चाहता, बाहर निकालता है, जो बेकार है। लेकिन मुझे वास्तव में क्या पसंद है, पूरी निर्देशिका की मांग करने के बजाय "फू * .जेपीजी" जैसे कुछ की खोज करने में सक्षम होना है, लेकिन मैं इस तरह से कुछ भी नहीं खोज पा रहा हूं।

तो हेक कैसे करते हो?

वेब के समाधान से एकत्रित समाधान "एक ग्लोब के साथ एक निर्देशिका में फ़ाइलों की सूची प्राप्त करना"

आप इसे एनएसपीडिकेट की मदद से आसानी से हासिल कर सकते हैं, जैसे:

 NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; NSFileManager *fm = [NSFileManager defaultManager]; NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil]; NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]; NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:fltr]; 

यदि आपको इसे NSURL के साथ करने की आवश्यकता है तो ऐसा लगता है:

 NSURL *bundleRoot = [[NSBundle mainBundle] bundleURL]; NSArray * dirContents = [fm contentsOfDirectoryAtURL:bundleRoot includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]; NSPredicate * fltr = [NSPredicate predicateWithFormat:@"pathExtension='jpg'"]; NSArray * onlyJPGs = [dirContents filteredArrayUsingPredicate:fltr]; 

यह IOS लिए बहुत अच्छी तरह से काम करता है, लेकिन cocoa लिए भी काम करना चाहिए

 NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; NSFileManager *manager = [NSFileManager defaultManager]; NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:bundleRoot]; NSString *filename; while ((filename = [direnum nextObject] )) { //change the suffix to what you are looking for if ([filename hasSuffix:@".data"]) { // Do work here NSLog(@"Files in resource folder: %@", filename); } } 

NSString के hassfix और hasPrefix तरीकों का उपयोग करने के बारे में क्या है? ऐसा कुछ (यदि आप "foo * .jpg" की खोज कर रहे हैं):

 NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; NSArray *dirContents = [[NSFileManager defaultManager] directoryContentsAtPath:bundleRoot]; for (NSString *tString in dirContents) { if ([tString hasPrefix:@"foo"] && [tString hasSuffix:@".jpg"]) { // do stuff } } 

सरल, सीधी मैचों के लिए, जैसे रीजेक्स लाइब्रेरी का उपयोग करने से यह आसान होगा।

बहुत सरल तरीका:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSFileManager *manager = [NSFileManager defaultManager]; NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; //--- Listing file by name sort NSLog(@"\n File list %@",fileList); //---- Sorting files by extension NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory error:nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF EndsWith '.png'"]; filePathsArray = [filePathsArray filteredArrayUsingPredicate:predicate]; NSLog(@"\n\n Sorted files by extension %@",filePathsArray); 

यूनिक्स के पास एक लाइब्रेरी है जो आपके लिए फ़ाइल ग्लोबबिग ऑपरेशन कर सकती है। फ़ंक्शन और प्रकार को glob.h नामक हेडर में घोषित किया जाता है, इसलिए आपको इसे #include करना होगा यदि एक टर्मिनल खोलें तो मैन man 3 glob टाइप करके ग्लोब के लिए मैन पेज को खोलें आपको फ़ंक्शन्स का उपयोग करने के लिए सभी जानकारियां मिल man 3 glob

नीचे एक उदाहरण दिया गया है कि आप एक सरणी को कैसे तैयार कर सकते हैं जो एक ग्लोबिंग पैटर्न से मेल खाते हैं glob फ़ंक्शन का उपयोग करते समय कुछ चीजें हैं जो आपको ध्यान में रखने की आवश्यकता होती हैं।

  1. डिफ़ॉल्ट रूप से, glob फ़ंक्शन वर्तमान कार्य निर्देशिका में फ़ाइलों के लिए दिखता है। किसी अन्य निर्देशिका की खोज के लिए आपको निर्देशिका नाम को ग्लोबिंग पैटर्न में शामिल करना होगा क्योंकि मैंने अपने सभी फाइलों को /bin में प्राप्त करने के लिए किया है।
  2. जब आप संरचना के साथ काम करते हैं तो globfree को फोन करके glob द्वारा आवंटित स्मृति को साफ करने के लिए आप ज़िम्मेदार हैं।

मेरे उदाहरण में मैं डिफ़ॉल्ट विकल्प और कोई त्रुटि कॉलबैक का उपयोग नहीं करता। मैन पेज में सभी विकल्पों को शामिल किया गया है, अगर वहां कुछ ऐसी जगह है जिसमें आप उपयोग करना चाहते हैं। यदि आप उपरोक्त कोड का उपयोग करने जा रहे हैं, तो मैं इसे NSArray या ऐसा कुछ करने के लिए एक श्रेणी के रूप में जोड़ने का सुझाव देता हूं

 NSMutableArray* files = [NSMutableArray array]; glob_t gt; char* pattern = "/bin/*"; if (glob(pattern, 0, NULL, &gt) == 0) { int i; for (i=0; i<gt.gl_matchc; i++) { [files addObject: [NSString stringWithCString: gt.gl_pathv[i]]]; } } globfree(&gt); return [NSArray arrayWithArray: files]; 

संपादित करें: मैंने Github पर एक सार बनाया है जिसमें एनएसएआरआरई + ग्लोबिंग नामक एक श्रेणी में उपरोक्त कोड शामिल है।

जिन फ़ाइलों को आप नहीं चाहें उनको खत्म करने के लिए आपको अपना तरीका रोल करना होगा।

यह उपकरण में निर्मित के साथ आसान नहीं है, लेकिन आप रिटर्न नोट्स के अनुसार तत्वों को खोजने में सहायता के लिए RegExKit लाइट का इस्तेमाल कर सकते हैं। रिलीज नोट्स के अनुसार यह कोको और कोको-टच दोनों अनुप्रयोगों में काम करना चाहिए।

यहाँ डेमो कोड है जिसे मैंने लगभग 10 मिनट में लिखा था मैंने <और> को "बदल दिया क्योंकि वे पूर्व ब्लॉक के अंदर प्रदर्शित नहीं हो रहे थे, लेकिन यह अभी भी कोट्स के साथ काम करता है। शायद कोई व्यक्ति जो स्टैक ओव्हरफ्लो पर यहां कोड स्वरूपण के बारे में अधिक जानता है, उसे सही होगा (क्रिस?)।

यह "फाउंडेशन टूल" कमांड लाइन यूटिलिटी टेम्पलेट प्रोजेक्ट है। अगर मुझे अपना जीआईटी डेमॉन मिलता है और अपने होम सर्वर पर चल रहा है तो मैं इस पोस्ट को परियोजना के लिए यूआरएल जोड़ने के लिए संपादित करूंगा।

 #import "फाउंडेशन / फाउंडेशन एच"
 # इंपोर्ट "रेगेक्सकिट / रेगेक्सकिट एच"

 @ इंटरफेस MTFileMatcher: NSObject 
 {
 }
 - (शून्य) getFilesMatchingRegEx: (NSString *) में रैज के लिए पथ: (NSString *) में पाथ;
 @समाप्त

 int main (int argc, const char * argv [])
 {
     NSAutoreleasePool * पूल = [[एनएसएयूटीओरियसपूल आलोक] इनिट];

     // यहां सम्मिलित करें कोड ...
     MTFileMatcher * matcher = [[[MTFileMatcher alloc] init] autorelease];
     [मैचर फिक्स मैसेचिंगआरगेईक्स: @ "^। + \\। [जेजे] [पीपी] [एई]? [जीजी] $" के लिएपाथ: [@ "~ / पिक्चर्स" स्ट्रिंगबय एक्सपांडिंगटिल्डे इनपाथ]];

     [पूल नाली];
     वापसी 0;
 }

 @ कार्यान्वयन MTFileMatcher
 - (शून्य) getFilesMatchingRegEx: (NSString *) में रैज के लिए पथ: (NSString *) में पाथ;
 {
     NSArray * filesAtPath = [[[NSFileManager डिफ़ॉल्ट प्रबंधक] निर्देशिकासंसाधनः एटपैथ: इनपाथ] सरणीबैमिंगिंगऑब्जेक्टविथ रीजजेक्स: इन रेजेक्स];
     NSEnumerator * आईआरआर = [फ़ाइलेंऐटपैथ ऑब्जेक्टअनुक्रमेटर];
     NSString * obj;
     जबकि (obj = [आईआरआर अगली ऑब्जेक्ट])
     {
         NSLog (obj);
     }
 }
 @समाप्त

मैं इस विषय पर एक विशेषज्ञ होने का ढोंग नहीं करूँगा, लेकिन उद्देश्य-सी से आपके पास दोनों glob और wordexp फ़ंक्शन की पहुंच होनी चाहिए?

stringWithFileSystemRepresentation IOS में उपलब्ध नहीं है।