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

给定路径[[self documentsDirectory] stringByAppendingPathComponent:@"myFiles/aFile.txt"] 的文件,我如何删除我的应用程序文档目录中的文件?

【问题讨论】:

    标签: iphone xcode


    【解决方案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)
        }}
      
    • 【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 2015-04-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多