删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 |Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录"; [英] Error deleting contents in directory - Domain=NSCocoaErrorDomain Code=4 | Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"

查看:315
本文介绍了删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 |Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How can I fix the following errors when running the code below? I already searched in SO but can't find anything for 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".UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA9E79F7EF1D文件/.DS_Store, NSUserStringVariant=(去掉), NSUnderlyingError=0x60800004fed0 {Error Domain=NSPOSIXErrorDomain Code=2没有那个文件或目录"}}

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".UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA9E79F7EF1D文件/2017-01-31_10-44-21.m4a, NSUserStringVariant=(去掉), NSUnderlyingError=0x60800004fa80 {Error Domain=NSPOSIXErrorDomain Code=2没有那个文件或目录"}}

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".UserInfo={NSFilePath=file:///Users/CIPL0469/Library/Developer/CoreSimulator/Devices/F0106B28-C4D1-4FE2-A425-D04C6BFDDC01/data/Containers/Data/Application/A5AB9B7B-6174-4BA9E79F7EF1D文件/2017-01-31_10-44-26.m4a, NSUserStringVariant=(去掉), NSUnderlyingError=0x60000004f570 {Error Domain=NSPOSIXErrorDomain Code=2没有那个文件或目录"}}

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"}}

推荐答案

nextObject() of (NS)DirectoryEnumerator 总是返回枚举项的完整路径/url,一个额外的连接中断了路径.除了将 URLString 与字符串插值连接起来以将其作为 path 参数传递的形式根本不起作用.

nextObject() of (NS)DirectoryEnumerator returns always the full path / url of the enumerated items, an additional concatenation breaks the path. Aside form that concatenating URL and String with String Interpolation to pass it as path parameter doesn't work at all.

我还是建议使用 URL 相关的 API

I recommend to use the URL related API anyway

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)
}

这篇关于删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 |Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆