删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 | Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录”

Moh*_*ham 2 nsfilemanager swift swift3

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

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

日志:

\n\n
\n

错误域=NSCocoaErrorDomain代码=4“\xe2\x80\x9c.DS_Store\xe2\x80\x9d无法\xe2\x80\x99被删除。” UserInfo={NSFilePath=文件:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA7-9EFD-0E9F1C98CB17/ Documents/.DS_Store,NSUserStringVariant=(\n删除\n),NSUnderlyingError=0x60800004fed0 {Error Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录”}}

\n\n

错误域=NSCocoaErrorDomain代码=4“\xe2\x80\x9c2017-01-31_10-44-21.m4a\xe2\x80\x9d无法\xe2\x80\x99被删除。” UserInfo={NSFilePath=文件:///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 =(\ n删除\ n),NSUnderlyingError = 0x60800004fa80 {Error Domain = NSPOSIXErrorDomain Code = 2“没有这样的文件或目录”}}

\n\n

错误域=NSCocoaErrorDomain代码=4“\xe2\x80\x9c2017-01-31_10-44-26.m4a\xe2\x80\x9d无法\xe2\x80\x99被删除。” UserInfo={NSFilePath=文件:///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 =(\ n删除\ n),NSUnderlyingError = 0x60000004f570 {错误域= NSPOSIXErrorDomain代码= 2“没有这样的文件或目录”}}

\n
\n

vad*_*ian 5

nextObject()of(NS)DirectoryEnumerator始终返回枚举项的完整路径/url,额外的串联会破坏路径。URL除了连接和String字符串插值将其作为参数传递的形式之外,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)
}
Run Code Online (Sandbox Code Playgroud)