NSString stringWithContentsOfFile失败,似乎是错误的错误代码

我试图加载一个文件到一个string。 这是我正在使用的代码:

NSError *error = nil; NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename ofType:@"html"]; NSString *text = [NSString stringWithContentsOfFile:fullPath encoding:NSUTF8StringEncoding error:&error]; 

当传入@“about”作为文件名,它工作得很好,显示代码的作品。 当在@“eula”作为文件名传入时,它会失败,'cocoa错误258',这将转换为NSFileReadInvalidFileNameError。 但是,如果我交换文件的内容,但保持相同的名称,另一个文件无法certificate没有什么错误的文件名,这是与内容有关。

about文件是相当简单的HTML,但eula文件是法律部门从Word导出的大量混乱文件。

有没有人知道可能会导致此错误被提出的HTML文件内的任何内容?

非常感谢,

山姆

这个错误几乎肯定是你的文件不是UTF-8,但你是对的,这听起来像错误报告中的错误。

用BBEdit(或免费的TextWrangler)打开eula文件,看看它使用什么编码。 将编码更改为UTF-8并保存。 比较两个文件,看看出现了什么差异。 用新的文件replace原来的文件(修复任何毛刺)。

如果解决了问题,则使用Apple Bug Reporter来报告错误报告中的错误。

我刚刚花了45分钟的时间解决这个问题,只是在我的情况下,解决scheme很愚蠢 ,问题稍有不同。

  • 我的资源目录中有一个名为Playlist.txt的文件。 它加载得很好。
  • 该文件在XCode中的某一点进行了修改。
  • 文件停止加载正确,与上面相同的错误。 然而,它从来没有被移动,也没有改变其编码types。
  • 我在XCode目录下的文件上做了一个命令(Get Info),它告诉我这是UTF-8(按预期)。
  • 我尝试了“usedEncoding”的方式来阅读文件,没有骰子。 同样的错误,编码是返回null。
  • 最后,我从XCode中删除了该文件,再次将其拖入,并执行了Clean All。 这解决了这个问题。

这不是第一次XCode神奇caching的东西(不正确)导致我浪费了几个小时的时间。 如果你有这样的错误没有意义,请尝试删除和replace文件,并清除所有目标。

我有和你一样的错误,使用文件名与[[NSBundle mainBundle] pathForResource:@“pageList”ofType:@“txt”]]祝你好运!

在这种情况下+stringWithContentsOfFile:encoding:error:会失败的最可能的原因是如果你提供了错误的编码。 你确定你的@"eula"文件是UTF8编码吗?

如果你不确定文件的编码方式,你总是可以试试+stringWithContentsOfFile:usedEncoding:error:来看看它是否有效,以及它是什么编码。

不知道这是否是你的问题,但我只是有一个类似的事情(stringWithContentsOfFile,没有JSON),问题是该文件有CRLF(窗口)行结束和西方无论它称为编码。 我用SubEthaEdit转换为LF和UTF-8,一切工作正常。

我遇到了同样的错误。

当我玩了一下,似乎没有将文件包含在目标的复制束资源中。

我做到了,它工作得很好。

但是,不得不说 – 对于这样一个简单的原因,错误是相当具有误导性的。 从Xcode只是一个糟糕的猜测