dar*_*ger 4 ios nsdocumentdirectory swift
我正在制作音频应用,用户可以下载本地存储到documentDirectoryusing中的文件FileManager。
接下来,我想允许用户使用一个按钮删除所有文件。在文档中,有一种删除项目的方法。
这是我的代码:
@IBAction func deleteDirectoryButton(_ sender: Any) {
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
do {
try FileManager.default.removeItem(at: documentsUrl, includingPropertiesForKeys: nil, options: [])
} catch let error {
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会出错Ambiguous reference to member 'removeItem(atPath:)'。
有没有更好的方法来一次访问documentDirectory和从目录中删除所有文件?
首先发生错误是因为API的签名错误。只是removeItem(at:)没有其他参数。
第二个问题是,你要删除该Documents目录本身,而不是文件中,你从这样做劝阻的目录。
您必须获取目录的内容并添加检查,例如仅删除MP3文件。更好的解决方案是使用子文件夹。
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
do {
let fileURLs = try FileManager.default.contentsOfDirectory(at: documentsUrl,
includingPropertiesForKeys: nil,
options: [.skipsHiddenFiles, .skipsSubdirectoryDescendants])
for fileURL in fileURLs {
if fileURL.pathExtension == "mp3" {
try FileManager.default.removeItem(at: fileURL)
}
}
} catch { print(error) }
Run Code Online (Sandbox Code Playgroud)
旁注:强烈建议始终使用与URL相关的API FileManager。
尝试这个
func clearAllFiles() {
let fileManager = FileManager.default
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
print("Directory: \(paths)")
do {
let fileName = try fileManager.contentsOfDirectory(atPath: paths)
for file in fileName {
// For each file in the directory, create full path and delete the file
let filePath = URL(fileURLWithPath: paths).appendingPathComponent(file).absoluteURL
try fileManager.removeItem(at: filePath)
}
} catch let error {
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)