swift - 删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 |域=NSPOSIXErrorDomain 代码=2 "No such file or directory"

标签 swift swift3 nsfilemanager

运行以下代码时出现以下错误,如何修复?我已经在 SO 中搜索过,但找不到 Swift 3 的任何内容。

// Delete all files in given directory
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let dataPath = NSURL(fileURLWithPath: path)
if let enumerator = FileManager.default.enumerator(atPath: dataPath.path!) {
    while let fileName = enumerator.nextObject() as? String {
        do {
            try FileManager.default.removeItem(atPath: "\(dataPath)\(fileName)")
        }
        catch let e as NSError {
            print(e)
        }
        catch {
            print("error")
        }
    }
}

日志:

Error Domain=NSCocoaErrorDomain Code=4 "“.DS_Store” couldn’t be removed." UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA7-9EFD-0E9F1C98CB17/Documents/.DS_Store, NSUserStringVariant=( Remove ), NSUnderlyingError=0x60800004fed0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Error Domain=NSCocoaErrorDomain Code=4 "“2017-01-31_10-44-21.m4a” couldn’t be removed." UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA7-9EFD-0E9F1C98CB17/Documents/2017-01-31_10-44-21.m4a, NSUserStringVariant=( Remove ), NSUnderlyingError=0x60800004fa80 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Error Domain=NSCocoaErrorDomain Code=4 "“2017-01-31_10-44-26.m4a” couldn’t be removed." UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA7-9EFD-0E9F1C98CB17/Documents/2017-01-31_10-44-26.m4a, NSUserStringVariant=( Remove ), NSUnderlyingError=0x60000004f570 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

最佳答案

(NS)DirectoryEnumerator

nextObject() 始终返回枚举项的完整路径/url,额外的串联会中断路径。除此之外,使用字符串插值连接 URLString 以将其作为 path 参数传递的形式根本不起作用。

无论如何,我建议使用与 URL 相关的 API

let fileManager = FileManager.default
do {
    let url = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    if let enumerator = fileManager.enumerator(at: url, includingPropertiesForKeys: nil) {
        while let fileURL = enumerator.nextObject() as? URL {
            try fileManager.removeItem(at: fileURL)
        }
    }
}  catch  {
    print(error)
}

关于swift - 删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 |域=NSPOSIXErrorDomain 代码=2 "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41974312/

相关文章:

swift - 检查对象是否是特定类并符合协议(protocol)

ios - UITableview View 重新加载动画问题

objective-c - 如何在Mac的主目录中搜索特定扩展名的文件?

ios - 谷歌地图无法加载,整个应用程序崩溃

arrays - Swift 和 JSON 问题

ios - Swift 3 - 发送同步http请求

ios - Swift 如何在临时文件夹中创建复杂的文件夹结构

swift - 将可拖动的 NSView 与 SwiftUI 组件相结合的问题

ios - 试图用现有的主键值 'Item' 创建一个类型为 '1' 的对象

ios - 查找给定的文件路径在 ios 中是否有效?