उद्देश्य-सी: पथ स्ट्रिंग से फ़ाइल नाम निकालें


251

जब मेरे पास NSStringहोता है /Users/user/Projects/thefile.extमैं thefileऑब्जेक्टिव-सी के तरीकों के साथ एक्सट्रैक्ट करना चाहता हूं ।

ऐसा करने का सबसे आसान तरीका क्या है?


4
[पथ lastPathComponent] या [[path pathCompords] lastObject]। दोनों the thefile.ext ’देते हैं। वहाँ 'पथ pathExtension] विधि' ext 'पाने के लिए है, लेकिन फ़ाइल नाम के लिए कोई समान नहीं है।
एंटन

जवाबों:


598

NSString संदर्भ से लिया गया , आप उपयोग कर सकते हैं:

NSString *theFileName = [[string lastPathComponent] stringByDeletingPathExtension];

lastPathComponentकॉल वापस आ जाएगी thefile.ext, और stringByDeletingPathExtensionअंत से विस्तार प्रत्यय निकाल देंगे।


9
मैंने कभी नहीं सुना lastPathComponent। धन्यवाद!
दिमित्रिस

6
एक और समाधान इस और मार्क के उत्तरों का एक संयोजन होगा: [[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](जो भी फ़ाइल प्रबंधक आपको चाहिए) का उपयोग करें। यह सुनिश्चित करता है कि फ़ाइल नाम सही ढंग से स्थानीयकृत है, और यह कि एक्सटेंशन हटा दिया गया है।
वंडरड

1
आपको बहुत - बहुत धन्यवाद! इससे बहुत मदद मिली! हालांकि आपको विस्तार कैसे मिलेगा?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

अरे, इस चर्चा के बाद यह थोड़ा सा है, लेकिन मैं सिर्फ कुछ सोच रहा हूं। मैं इस क्रिया को कैसे उलटाऊंगा? मैं अंततः अपने प्रोग्राम में कुछ कोड जोड़ूंगा, जहां मैं किसी फ़ाइल को खींच कर छोड़ सकता हूं। मुझे PATH ITSELF कैसे मिलेगा, इसलिए मेरा कंप्यूटर जान सकता है कि किस फ़ाइल को एक्सेस करना है? मैं दर्ज की गई फ़ाइल को कैसे ले सकता हूँ और फ़ाइल का पथ प्राप्त कर सकता हूँ?
क्रिश्चियन क्रेटर

37

यदि आप उपयोगकर्ता-पठनीय फ़ाइल नाम प्रदर्शित कर रहे हैं, तो आप उपयोग नहीं करना चाहते हैं lastPathComponent। इसके बजाय, NSFileManager की displayNameAtPath:विधि के लिए पूर्ण पथ पास करें । यह मूल रूप से एक ही काम करता है, केवल यह फ़ाइल नाम को सही ढंग से स्थानीय करता है और उपयोगकर्ता की वरीयताओं के आधार पर विस्तार को हटा देता है।


1
बंडलों के लिए, आप इसके बजाय [[[[NSBundle bundleWithPath: pref] localizedInfoDictionary] objectForKey: @ "CFBundleName" का उपयोग करना चाह सकते हैं। displayNameAtPath में वह एक्सटेंशन शामिल है जहां यह कोड स्थानीयकृत नाम लौटाता है।
पीटर एन लुईस

1
पहले CFBundleDisplayName की जांच करना न भूलें।
पीटर होसी

3

विषय के देर से और बंद होने के जोखिम पर - और @ मार्क की उत्कृष्ट अंतर्दृष्टि के बावजूद, स्विफ्ट में ऐसा दिखता है:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.