使用Swift 3,我将视频文件写入文档文件夹。 这是文件的路径。
file:///var/mobile/Containers/Data/Application/D031AB20-CB7E-4B14-9483-E7C3F4C0EC55/Documents/output11:10:04.mov
现在我想使用filemanager
再次删除该文件。我从avassetwriter
检索上面的路径,并使用我之前定义的outputurl
使用filemanager删除文件。
let fileManager = FileManager.default
do {
try fileManager.removeItem(at: (self.assetWriter?.outputURL)!)
} catch let err {
print(err)
}
但是我得到的错误是没有这样的文件或目录。
使用self.assetWriter?.outputURL.path
给出了同样的错误。
错误域= NSCocoaErrorDomain代码= 4"“output11 / 10 / 04.mov”无法 被删除。" 的UserInfo = {NSFilePath =的/ var /移动/容器/数据/应用/ D031AB20-CB7E-4B14-9483-E7C3F4C0EC55 /文档/ output11:10:04.mov, NSUserStringVariant =( 删除),NSUnderlyingError = 0x174240150 {错误域= NSPOSIXErrorDomain代码= 2"没有这样的文件或目录"}}
答案 0 :(得分:3)
不要在文件名中使用冒号。
(由于遗留原因)操作系统将它们视为路径分隔符并用斜杠替换它们。
答案 1 :(得分:3)
首先检查该路径上存在的文件是否存在,如果存在则删除它: -
let file_manager = FileManager.init()
if let url = self.assetWriter?.outputURL{
if file_manager.fileExists(atPath: url.path){
if file_manager.isDeletableFile(atPath: url.path){
do {
try file_manager.removeItem(at: url)
} catch let err {
print(err.localizedDescription)
}
}
}
}
答案 2 :(得分:2)
从开始删除“ file://”字符串。
let path = documentPathValue.replacingOccurrences(of: "file://", with: "")
完整代码
func clearAllFilesFromDirectory() {
let fileManager = FileManager.default
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as NSURL
let documentsPath = documentsUrl.path
do {
if let documentPathValue = documentsPath{
let path = documentPathValue.replacingOccurrences(of: "file://", with: "")
let fileNames = try fileManager.contentsOfDirectory(atPath: "\(path)")
print("all files in cache: \(fileNames)")
for fileName in fileNames {
let tempPath = String(format: "%@/%@", path, fileName)
//Check for specific file which you don't want to delete. For me .sqlite files
if !tempPath.contains(".sql") {
try fileManager.removeItem(atPath: tempPath)
}
}
}
} catch {
print("Could not clear document directory \(error)")
}
}