String(contentsOf: URL) 返回“没有这样的文件或目录”
Posted
技术标签:
【中文标题】String(contentsOf: URL) 返回“没有这样的文件或目录”【英文标题】:String(contentsOf: URL) returns "No such file or directory" 【发布时间】:2019-01-13 22:58:46 【问题描述】:我是一个快速的初学者,我正在尝试编写一个函数来读取 *.csv 文件的内容并返回一个二维数组 [[Double]]。
我正在使用在 macOS 10.14 上运行的 Xcode 10.1。
我正在使用以下代码(在操场上)将文件内容读入字符串:
let home = FileManager.default.homeDirectoryForCurrentUser //
let file = "Documents/MyAppName/x.csv"
let url = home.appendingPathComponent(file)
url.path // This gives: "/Users/userName/Documents/MyAppName/x.csv"
let s = try String(contentsOf: url)
我收到以下错误:
Error Domain=NSCocoaErrorDomain Code=260 "无法打开文件“x.csv”,因为没有这样的文件。" UserInfo=NSFilePath=/Users/userName/Documents/MyAppName/x.csv, NSUnderlyingError=0x7febf3c991b0 Error Domain=NSPOSIXErrorDomain Code=2 "没有这样的文件或目录"
我知道这可能是我忘记的非常简单的事情,但我寻找了很多解决方案,但我找不到。有什么建议吗?
【问题讨论】:
除此之外,playground 是否允许您从文件系统中读取任意文件?我知道每当我编写一个应用程序来读取文件时,它总是会失败,然后我必须添加一个读取文件的权利。 @user1118321:我尝试在终端应用程序中运行它,但它给了我同样的错误。 【参考方案1】:问题在于这一行:
let file = "Documents/MyAppName/x.csv"
您看不到它,但在 s
和 /
之间有一个隐藏字符 - U+2069 - “POP DIRECTIONAL ISOLATE”。再次重新键入该行,不带任何特殊字符,您的代码将正常工作。
除此之外,下面是您应该如何创建 Documents 文件夹的 URL。
let home = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let file = "MyAppName/x.csv"
【讨论】:
您能解释一下为什么尽管path
的输出看起来相同,但它仍然有效吗?这让我很惊讶。
@user1118321 我正在尝试自己解决这个问题。但与此同时,我的答案中的代码是访问用户文档文件夹的正确方法。
非常感谢您的回复!不幸的是,我试过了,但我仍然遇到同样的错误。
我刚刚更新了我对真正问题的回答。请查看更新。
哇哦!太疯狂了!接得好!我曾经遇到过一个问题,即每当我按下已连接到我的 Mac 的 Windows 键盘的 Windows 键时,Xcode(或实际上任何应用程序,但这只是 Xcode 中的一个问题)会在我的文档中插入一个不可见的 Cntl-P。此外,Xcode 没有为那个角色渲染任何东西。我不记得我是如何最终弄清楚发生了什么事的,但这是一次令人毛骨悚然的经历!以上是关于String(contentsOf: URL) 返回“没有这样的文件或目录”的主要内容,如果未能解决你的问题,请参考以下文章
NSData init?(contentsOf url: URL) 从 Swift 2 迁移到 Swift 3
当我在快速失败时使用 try String(contentsOf: shareLog) 将每个字符串附加到 .txt 文件时