2015-12-19 3 views
13

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

किसी कारण से यह काम नहीं करता:

फ़ाइल बनाना:

let reference = "test.pdf"  
let RequestURL = "http://xx/_PROJEKTE/xx\(self.reference)" 
let ChartURL = NSURL(string: RequestURL) 

//download file 
let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! as NSURL 
let destinationUrl = documentsUrl.URLByAppendingPathComponent(ChartURL!.lastPathComponent!) 
if NSFileManager().fileExistsAtPath(destinationUrl.path!) { 
    print("The file already exists at path") 
} else { 
    // if the file doesn't exist 
    // just download the data from your url 
    if let ChartDataFromUrl = NSData(contentsOfURL: ChartURL!){ 
     // after downloading your data you need to save it to your destination url 
     if ChartDataFromUrl.writeToURL(destinationUrl, atomically: true) { 
      print("file saved") 
      print(destinationUrl) 
     } else { 
      print("error saving file") 
     } 
    } 
} 

तो मैं इस तरह आइटम हटाने के लिए, test() समारोह कॉल करना चाहते हैं:

func test(){ 

    let fileManager = NSFileManager.defaultManager() 
    let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! as NSURL 

    do { 
     let filePaths = try fileManager.contentsOfDirectoryAtPath("\(documentsUrl)") 
     for filePath in filePaths { 
      try fileManager.removeItemAtPath(NSTemporaryDirectory() + filePath) 
     } 
    } catch { 
     print("Could not clear temp folder: \(error)") 
    } 
} 
+1

मुझे लगता है कि आप को बचाने और इन फ़ाइलों को हटाने के लिए '.CachesDirectory' बल्कि' से .DocumentDirectory' उपयोग करने पर विचार करना चाहते हैं। – TwoStraws

+0

मैंने अपनी फाइल को सहेजने का प्रयास किया लेकिन यह –

+1

काम नहीं करता है आपको निश्चित रूप से [एप बैकअप सर्वोत्तम प्रथाओं] (https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips के माध्यम से पढ़ना चाहिए /PerformanceTips.html#//apple_ref/doc/uid/TP40007072-CH7-SW17) और [QA1719] (https://developer.apple.com/library/ios/qa/qa1719/_index.html) फिर। – TwoStraws

उत्तर

8

मेरा मानना ​​है कि आपकी समस्या को इस लाइन पर है:

let filePaths = try fileManager.contentsOfDirectoryAtPath("\(documentsUrl)") 

आप कुछ है कि एक NSURL है साथ contentsOfDirectoryAtPath() उपयोग कर रहे हैं। आप या तो पथ तार या यूआरएल चुनते हैं, दोनों को मिश्रण करने की कोशिश नहीं करते हैं। अपने संभावित अगले प्रश्न को पूर्व-खाली करने के लिए, यूआरएल को प्राथमिकता दी जाती है। contentsOfDirectoryAtURL() और removeItemAtURL() का उपयोग करने का प्रयास करें।

एक और जिज्ञासु बात आप एक बार आप उपरोक्त समस्याओं का समाधान पर गौर करना चाहिए: तुम क्यों फ़ाइल पथ के लिए NSTemporaryDirectory() उपयोग कर रहे हैं जब आप हटाने का प्रयास? आप दस्तावेज़ निर्देशिका पढ़ रहे हैं और इसका उपयोग करना चाहिए।

+0

वहाँ "पूरा CachesDirectory()" को नष्ट करने के लिए एक रास्ता है? –

+0

दस्तावेज़ और लाइब्रेरी/कैश हटाए नहीं जाना चाहिए। यदि आप चाहें तो फ़ाइलों को जोड़ें और हटाएं, लेकिन उन्हें हटाएं नहीं। नोट: आवश्यकतानुसार आईओएस द्वारा लाइब्रेरी/कैश को आपके लिए साफ़ किया जाना चाहिए। – TwoStraws

+0

तो क्या मैंने इसे सही समझा -> कैश डायरेक्टरी() में संग्रहीत फ़ाइलों को हटाएं, आईओएस स्वयं इसे "हटा" देगा? –

29

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

private func test(){ 

    let fileManager = NSFileManager.defaultManager() 
    let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first! as NSURL 
    let documentsPath = documentsUrl.path 

    do { 
     if let documentPath = documentsPath 
     { 
      let fileNames = try fileManager.contentsOfDirectoryAtPath("\(documentPath)") 
      print("all files in cache: \(fileNames)") 
      for fileName in fileNames { 

       if (fileName.hasSuffix(".png")) 
       { 
        let filePathName = "\(documentPath)/\(fileName)" 
        try fileManager.removeItemAtPath(filePathName) 
       } 
      } 

      let files = try fileManager.contentsOfDirectoryAtPath("\(documentPath)") 
      print("all files in cache after deleting images: \(files)") 
     } 

    } catch { 
     print("Could not clear temp folder: \(error)") 
    } 
} 

**** अद्यतन तेज 3 ****

 let fileManager = FileManager.default 
     let documentsUrl = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first! as NSURL 
     let documentsPath = documentsUrl.path 

     do { 
      if let documentPath = documentsPath 
      { 
       let fileNames = try fileManager.contentsOfDirectory(atPath: "\(documentPath)") 
       print("all files in cache: \(fileNames)") 
       for fileName in fileNames { 

        if (fileName.hasSuffix(".png")) 
        { 
         let filePathName = "\(documentPath)/\(fileName)" 
         try fileManager.removeItem(atPath: filePathName) 
        } 
       } 

       let files = try fileManager.contentsOfDirectory(atPath: "\(documentPath)") 
       print("all files in cache after deleting images: \(files)") 
      } 

     } catch { 
      print("Could not clear temp folder: \(error)") 
     } 
+1

पहली 3 लाइनें (स्विफ्ट 3) शानदार हैं और मेरे ऑडियो रिकॉर्डर/प्लेयर (यानी dictaphone) के लिए सीआरयूडी के साथ मेरी मदद की! धन्यवाद! –

+0

अपने पूरी तरह से काम कर रहे सही मैच। साझा फ़ोल्डर के साथ भी। बहुत बहुत धन्यवाद –