2010-08-04 7 views
9

मेरे आवेदन में, मैंने उपयोगकर्ता को ध्वनि क्लिप रिकॉर्ड करने दिया और बाद में, यदि उपयोगकर्ता चुनता है, तो मैं चाहता हूं कि वह इसे हटा सके।आईफोन/उद्देश्य सी: फ़ाइल को हटा नहीं सकता

इस कोड मैं का उपयोग करें:

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSLog(@"File exists: %d", [fileManager fileExistsAtPath:path]); 
NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:path]); 
[fileManager removeItemAtPath:path error:&error]; 
if (error != nil) 
{ 
    NSLog(@"Error: %@", error); 
    NSLog(@"Path to file: %@", path); 
} 

समस्या यह है कि fileExistsAtPath और isDeletableFileAtPath वापसी बातिल और removeItemAtPath काम नहीं करता है, और इस त्रुटि फेंकता है,

Error: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x391b7f0 "Operation could not be completed. (Cocoa error 4.)"

मार्ग होता है यह फॉर्म:

/Users/andrei/Library/Application%20Support/iPhone%20Simulator/User/Applications/5472B318-FA57-4F8D-AD91-7E06E9609215/Documents/1280913694.caf 

वहां एक फ़ाइल है जिसे 1280913694.caf कहा जाता है, लेकिन यह इसे नहीं उठाता है। क्या पथ के प्रतिनिधित्व के तरीके के साथ ऐसा कुछ करना है?

पथ AVAudioPlayer के साथ ऑडियो फ़ाइल चलाते समय काम करता है।

मैं भी fileExistsAtPath और isDeletableFileAtPath के लिए %d को %@ बदल दिया है और जवाब 0 है, जो मुझे लगता है कि गलत मतलब है।

फ़ाइल का नाम एक डेटाबेस में संग्रहीत है, और फ़ाइल का पथ इस विधि के साथ लिया गया है:

-(NSString *)returnFullPathToDirectory 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return documentsDirectory; 
} 

के बाद मैं इस मूल्य मिलता है, मैं इसे निम्नलिखित कोड में उपयोग

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 
+1

कृपया '-removeItemAtPath' से'% d' से पहले दो '% @' को बदलें और फिर से चलाएं। – kennytm

+0

ध्यान दें कि फ़ाइल: // उपसर्ग को हटाया जाना चाहिए, यानी NSURL में कनवर्ट करें और .path विशेषता प्राप्त करें (जैसा कि वास्तव में पथ ऊपर है) – ThomasRS

उत्तर

26

के लिए आपका चेक सही नहीं है। आपको विधि के वापसी मूल्य पर एक बूल सेट करना चाहिए और त्रुटि शर्तों को संभालने के लिए इसका उपयोग करना चाहिए क्योंकि विधि को सफलतापूर्वक पूरा करने के लिए संभव है और त्रुटि के बाद त्रुटि न हो। इसलिए, फ़ाइल वास्तव में हटा दी गई है लेकिन आपको एक गलत त्रुटि मिल रही है।

यदि फ़ाइल मौजूद नहीं है तो आपको फ़ाइल को हटाने की भी कोशिश नहीं करनी चाहिए।

इसके अलावा, मैं आम तौर पर सिर्फ त्रुटि के localizedDescription लॉग इन करें कि के रूप में आसान है

को पढ़ने के लिए इस कोड को अपने प्रोजेक्ट में काम करता है (पथ कहीं परिभाषित किया गया था):

NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    BOOL fileExists = [fileManager fileExistsAtPath:path]; 
    NSLog(@"Path to file: %@", path);   
    NSLog(@"File exists: %d", fileExists); 
    NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:path]); 
    if (fileExists) 
    { 
     BOOL success = [fileManager removeItemAtPath:path error:&error]; 
     if (!success) NSLog(@"Error: %@", [error localizedDescription]); 
    } 

संबंधित जवाब: NSError: Does using nil to detect Error actually turn off error reporting?

0

यूआरएल एन्कोडेड फ़ाइल पथ मुझे संदिग्ध लग रहा है। मैंने कहीं पढ़ा है कि इन दिनों आईफोन फ़ाइल पथों को यूआरएल के रूप में प्रदर्शित किया जाना चाहिए, लेकिन मुझे नहीं लगता कि रिक्त स्थान को यूआरएल एन्कोड किया जाना चाहिए।

% 20 को अपने पथ से हटाने और पुनः प्रयास करने का प्रयास करें?

+1

मैंने फ़ाइल पथ दिया: **/उपयोगकर्ता/एंड्रेई/लाइब्रेरी/एप्लिकेशन सपोर्ट/आईफोन सिम्युलेटर/यूजर/एप्लीकेशन/0547 एई 74-एडी 10-4 बीईएफ-9 8 सीएफ -8 एफएफएफ 5 बीबी 2 एफ 70 एफ/दस्तावेज/1280913694.caf ** तो, कोई% 20, और अब ... जो अजीब है, यह मुझे बताता है कि फ़ाइल मौजूद नहीं है (fileExistsAtPath पर 0 देता है), लेकिन यह भी कि फ़ाइल हटाया जा सकता है (isDeletableFileAtPath पर 1 देता है)। त्रुटि अभी भी बनी हुई है और फ़ाइल को हटा नहीं रही है। – Andrei

+0

क्या आप पथ को पुनः प्राप्त करने के लिए उपयोग कर रहे कोड को पोस्ट कर सकते हैं? – Jasarien

+0

मूल प्रश्न में एक दूसरे संपादन (** संपादन 2 **) – Andrei

-8

NSFileManager *fileManager = [NSFileManager defaultManager]; 

बदलने का प्रयास करें: (! त्रुटि = शून्य)

NSFileManager *fileManager = [NSFileManager new]; 
+4

उह, नहीं। उसे शुरू करने का अधिकार था। –

+0

क्या यह भी उचित उद्देश्य है? – Jason

संबंधित मुद्दे