2015-12-19 7 views
13

Ich habe einige PDF-Dateien in meine App heruntergeladen und möchte diese beim Schließen der Anwendung löschen.Löschen von Dateien im iOS-Verzeichnis mithilfe von Swift

Aus irgendeinem Grund funktioniert es nicht:

Erstellen der Datei:

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") 
     } 
    } 
} 

Dann möchte ich die test() Funktion aufrufen, um die Elemente zu entfernen, wie folgt aus:

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

Ich vermute, Sie wollen '.CachesDirectory' zu prüfen, mit anstatt' .DocumentDirectory' zum Speichern und Löschen dieser Dateien. – TwoStraws

+0

Ich habe versucht, meine Datei dort zu speichern, aber es hat nicht funktioniert –

+1

Sie sollten auf jeden Fall [App Backup Best Practices] lesen (https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips /PerformanceTips.html#//apple_ref/doc/uid/TP40007072-CH7-SW17) und [QA1719] (https://developer.apple.com/library/ios/qa/qa1719/_index.html) dann. – TwoStraws

Antwort

8

Ich glaube, dass Ihr Problem in dieser Zeile ist:

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

Sie verwenden contentsOfDirectoryAtPath() mit etwas, das ein NSURL ist. Sie wählen entweder Pfadzeichenfolgen oder URLs aus und versuchen nicht, beide zu mischen. Um die nächste mögliche Frage vorwegzunehmen, werden URLs bevorzugt. Versuchen Sie es mit contentsOfDirectoryAtURL() und removeItemAtURL().

Eine andere seltsame Sache, die Sie betrachten sollten, sobald Sie das oben genannte lösen: Warum verwenden Sie NSTemporaryDirectory() für den Dateipfad, wenn Sie versuchen, zu löschen? Sie lesen das Dokumentverzeichnis und sollten es verwenden.

+0

gibt es eine Möglichkeit, die "vollständige CachesDirectory()" zu löschen? –

+0

Dokumente und Bibliothek/Caches sollten nicht gelöscht werden. Fügen Sie Dateien hinzu und entfernen Sie sie, wenn Sie möchten, aber löschen Sie sie nicht. Hinweis: Llibrary/Caches sollten bei Bedarf von iOS für Sie freigeschaltet werden. – TwoStraws

+0

also habe ich es richtig verstanden -> lösche nicht die gespeicherten Dateien in CachesDirectory(), iOS ll "lösche" sie selbst? –

29

Dieser Code funktioniert für mich. Ich habe alle Bilder entfernt, die zwischengespeichert wurden.

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)") 
    } 
} 

**** aktualisieren swift 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

die ersten 3 Zeilen (Swift3) sind fantastisch und haben mir mit CRUD für meinen Audiorecorder/-player (diktiergerät) geholfen! Vielen Dank! –

+0

perfekt passt perfekt funktioniert. Auch mit freigegebenen Ordnern. Danke vielmals –

Verwandte Themen