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}\nRun Code Online (Sandbox Code Playgroud)\n\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
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)
| 归档时间: |
|
| 查看次数: |
7645 次 |
| 最近记录: |