首页 > 解决方案 > 如何从 FileManager 中删除文件?

问题描述

请参阅图像作为参考我正在处理一个项目,其中我需要显示一个 UICollectionview,其中包括来自文件管理器的文件,在这个集合视图中我显示图像和文件夹。还有一个按钮可以删除选定的单元格。那么如何从文档目录中删除选定的文件夹/图像?

我正在使用此功能创建文件夹。

    func createDir() {
        let manager = FileManager.default
        guard let url = manager.urls(for: .documentDirectory, in: .userDomainMask).first else {
            return
        }
        print("url path is ==>>",url.path)
        
        let folderName = url.appendingPathComponent(folderNameTextField.text!)
        do {
            try manager.createDirectory(at: folderName, withIntermediateDirectories: true, attributes: [:])
            print("Saved")
            listFilesFromDocumentsFolder()
//            getAllDirectoriesList()
        }
        catch {
            print(error)
        }
    }

`并使用此功能保存图像

        func saveImageToDocumentDirectory(image: UIImage ) {
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
//        
        let fileName = "Doc-" + dateFormatter.string(from: Date())
        let fileURL = documentsDirectory.appendingPathComponent(fileName
        )
        if let data = image.jpegData(compressionQuality: 1.0),!FileManager.default.fileExists(atPath: fileURL.path){
            do {
                try data.write(to: fileURL)
                print("file saved")
            } catch {
                print("error saving file:", error)
            }
        }
    }

我正在用这个功能删除,它工作但异常,

        for file in folderImageArray {
                    try! FileManager.default.removeItem(at: file)
                }

并且此功能导致崩溃。

        for file in folderNameArray {
                    try! FileManager.default.removeItem(atPath: file)
                }

标签: iosswiftnsfilemanagernsdocumentdirectory

解决方案


你不应该强制解开 try 块,使用 do try 至少它会给你它不工作的原因。另外添加一点延迟也可以正常工作

for file in folderImageArray {
    do {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
          try FileManager.default.removeItem(at: file)
        }
    } catch {
      print("File Deletion Failed: \(error.localizedDescription)")
    }  

}

推荐阅读