我正在读取名称中带有斜杠的文件。我可以验证它是否存在于我正在寻找它的路径中,但是从中创建NSData
失败。我尝试使用构建网址的字符串中的/
替换%2F
,但它并没有带来任何影响。
这是构造网址的代码:
let fileID = "This/That"
let filename = "\(fileID).json"
let bundleDirURL = myBundle.URLForResource("dirname", withExtension: nil, subdirectory: "MyFiles")
let fileURL = bundleDirURL.URLByAppendingPathComponent("Subpath").URLByAppendingPathComponent(filename)
let data = NSData(contentsOfURL: fileURL)
列表行给我一个空数据,即使该文件存在于正确的路径中。我知道/
绊倒了它。我怎样才能解决这个问题?我需要在文件名中保留/
。
答案 0 :(得分:3)
/
实际上不是Darwin(OS X或iOS)文件名中的合法字符。在某些情况下,用户界面只是让它看起来像一样。 OS X与:
交换/
。因此,您文件的实际名称为This:That
。根据您使用的工具,它将呈现为This:That
或This/That
。这是来自Mac OS 9的旧版保留。在Mac OS 9及更早版本中,:
是非法的,但/
是合法的。在达尔文(通过OS X),情况恰恰相反。
如果可以的话,你真的非常希望避免这种情况,而且文件名中没有/
或:
(-
和_
通常更安全,并且.
通常很好)。但如果必须,那么您将不得不在字符串中将其换成:
。