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 文件时

从 URL 下载到本地存储的快速图像

设置UIBarButtonItem为圆形图像轮廓。

NSKeyedUnarchiver 不适用于 Swift 3

如何处理 swift 3 中的错误?