ios - 如何从 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)
}
解决方案
你不应该强制解开 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)")
}
}
推荐阅读
- r - 带有 R 3.5.1 的 OpenCPU
- python - python:在numpy.ndarray中返回最小值
- sql - 使用插入语句进行转换的问题
- zapier - Zapier Trigger:从动态下拉列表中删除“其他选项”
- azure - 调试 Azure 函数 - 找不到 VoidMethodInvoker.cs
- javascript - 如何通过 Javascript 编辑这个特定类的 href?
- javascript - Konva 文本边界
- .net - 如何在 Windows / .NET 中找出默认的度量单位系统(英制或公制)?
- dask - 在 dask 分布式设置中,工作人员处于空闲状态
- ios - Xamarin 表单 - 无法使用 url https 连接到 SignalR(不适用于 iOS,但适用于 Android)