2015-12-19 34 views
13

私のアプリにいくつかのPDFファイルをダウンロードし、アプリケーションを閉じるときにこれらを削除したいと思います。それは動作しません何らかの理由でSwiftを使用してiOSディレクトリ内のファイルを削除

ファイルの作成:

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

私はあなたがこれらのファイルを保存し、削除するためではなく.DocumentDirectory' ''より.CachesDirectory'を使用することを検討したいと思います。 – TwoStraws

+0

私はファイルをそこに保存しようとしましたが動作しませんでした –

+1

[app backup best practices](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 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()関数を呼び出したいです私はあなたの問題がこの行にあると信じています:

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

contentsOfDirectoryAtPath()にはNSURLという文字列を使用しています。パス文字列またはURLのどちらかを選択し、両方を混在させないでください。あなたの可能な次の質問を事前に空にするには、URLが優先されます。 contentsOfDirectoryAtURL()removeItemAtURL()をお試しください。

もう1つ不思議なことに、あなたは上記を解決しなければなりません:なぜあなたは削除しようとするとファイルパスにNSTemporaryDirectory()を使用していますか?あなたはドキュメントディレクトリを読んでいるので、それを使うべきです。

+0

が完全なCachesDirectory()を削除する方法はありますか? –

+0

ドキュメントとライブラリ/キャッシュは削除しないでください。必要に応じてファイルを追加および削除しますが、削除しないでください。注:必要に応じて、ライブラリ/キャッシュはiOSによってクリアされる必要があります。 – TwoStraws

+0

そう、私はそれを正しく理解していた - > CachesDirectory()、iOS llで保存されたファイルを削除しないでください "それを"自分でそれを削除? –

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行(Swift3)は幻想的で、私のオーディオレコーダー/プレーヤー(つまりディクタフォン)のCRUDで助けになりました!ありがとう! –

+0

完璧にマッチします。共有フォルダもあります。どうもありがとう –

関連する問題