【问题标题】:How can i delete files from FileManager?如何从 FileManager 中删除文件?
【发布时间】:2021-10-14 08:51:29
【问题描述】:

See Image as reference我正在做一个项目,我需要在其中显示一个 UICollectionview,其中包括来自文件管理器的文件,在这个 collectionview 中我显示图像和文件夹。还有一个按钮可以删除选定的单元格。 那么如何从文档目录中删除选定的文件夹/图像?

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

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

【问题讨论】:

  • 一个叫'folderImageArray'的人从哪里来?一个叫'folderNameArray'的人来自哪里?您的文件在哪里?如果文件位于您的沙盒文件夹中,您只能在未经用户同意的情况下使用您的文件。
  • folderImageArray 是一个 URL 数组,我用来在 UICollectionView 中显示图像,而 folderNameArray 是一个字符串数组,我用来在 UICollectionView 中显示文件夹名称。
  • 没有人知道您的收藏视图中显示的文件来自哪里。你的收藏视图在哪里?它的数据集来源是什么?
  • CollectionView 显示为应用程序的主页。
  • 我添加了图片,以便任何人都能理解。我正在 UICollectionView 中显示文档目录中的所有文件。

标签: ios swift nsfilemanager nsdocumentdirectory


【解决方案1】:

你不应该强制打开 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)")
    }  

}

【讨论】:

  • 显示错误,调用实例方法'asyncAfter'没有完全匹配。
  • 这一次也报错 -->> 从 '() throws -> Void' 类型的抛出函数到非抛出函数类型 '@convention(block) () -> 的无效转换虚无'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2011-03-09
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多