如何删除我的应用程序文档目录中的文件?

Posted

技术标签:

【中文标题】如何删除我的应用程序文档目录中的文件?【英文标题】:How do I delete a file in my apps documents directory? 【发布时间】:2010-02-05 03:47:48 【问题描述】:

给定路径[[self documentsDirectory] stringByAppendingPathComponent:@"myFiles/aFile.txt"] 的文件,我

【问题讨论】:

【参考方案1】:

NSFileManager 是一个非常方便的工具:

[[NSFileManager defaultManager] removeItemAtPath: pathToFile error: &error];

【讨论】:

removeItemAtURL:error: 是另一个有用的 NSFileManager 方法。我发现 URL 通常比路径更容易使用。【参考方案2】:

在 Swift 3 中,FileManager 有一个名为 removeItem(at:) 的方法。 removeItem(at:) 有以下声明:

func removeItem(at URL: URL) throws

删除指定 URL 处的文件或目录。


下面的代码片段展示了如何使用removeItem(at:)删除文件:

do 
    try FileManager.default.removeItem(at: fileUrl)
 catch 
    print("Could not delete file: \(error)")


作为一个完整的例子,下面的UIViewController子类实现展示了如何将一个文件从应用程序包复制到文档目录中的特定url,删除文档目录中特定url的文件并检查文件是否存在在文档目录中的特定 url:

import UIKit

class ViewController: UIViewController 

    @IBAction func copyFile(_ sender: UIButton) 
        // Get app bundle file url
        guard let bundleFileUrl = Bundle.main.url(forResource: "Movie", withExtension: "mov") else  return 

        // Create a destination url in document directory for file
        guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else  return 
        let documentDirectoryFileUrl = documentsDirectory.appendingPathComponent("Movie.mov")

        // Copy bundle file to document directory
        if !FileManager.default.fileExists(atPath: documentDirectoryFileUrl.path) 
            do 
                try FileManager.default.copyItem(at: bundleFileUrl, to: documentDirectoryFileUrl)
             catch 
                print("Could not copy file: \(error)")
            
        
    

    @IBAction func deleteFile(_ sender: UIButton) 
        // Get destination url in document directory for file
        guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else  return 
        let documentDirectoryFileUrl = documentsDirectory.appendingPathComponent("Movie.mov")

        // Delete file in document directory
        if FileManager.default.fileExists(atPath: documentDirectoryFileUrl.path) 
            do 
                try FileManager.default.removeItem(at: documentDirectoryFileUrl)
             catch 
                print("Could not delete file: \(error)")
            
        
    

    @IBAction func checkIfFileExist(_ sender: UIButton) 
        // Get destination url in document directory for file
        guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else  return 
        let outputUrl = documentsDirectory.appendingPathComponent("Movie.mov")

        // Print if file exists in document directory or not
        FileManager.default.fileExists(atPath: outputUrl.path) ? print("File exists") : print("File does not exist")
    


【讨论】:

【参考方案3】:

对于 Swift 3.x 和 Xcode 8.x

itemName - 将文件存储在文档目录中的名称 文件扩展名-文件的扩展名
func removeItemForDocument(itemName:String, fileExtension: String) 
  let fileManager = FileManager.default
  let NSDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
  let NSUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
  let paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)
  guard let dirPath = paths.first else 
      return
    
  let filePath = "\(dirPath)/\(itemName).\(fileExtension)"
  do 
    try fileManager.removeItem(atPath: filePath)
   catch let error as NSError 
    print(error.debugDescription)
  

【讨论】:

以上是关于如何删除我的应用程序文档目录中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 从特定文档目录位置删除所有文件

如何从 iPhone 的文档目录中删除超过两天的文件

列出IOS中的文档文件[关闭]

如何将 sqlite3 数据库文件存储在应用程序的 Library 目录中?

iphone应用程序终止时删除文档文件夹中的文件

如何从其他 iOS 应用程序读取我应用程序的 Document 目录中的文档?