ios中 file:///var/mobile/Containers 和 file:///private/var/mobile/Containers 有什么区别?

6

它们是不同的还是简单的别名?

我通过运行以下命令来获取 /private/var 目录:

FileManager.default.contentsOfDirectory(at: folder, includingPropertiesForKeys: [], options: [])

第二个则是通过简单的方式创建:
data.write(to: f, options: [.atomic]) 

其中f与"folder"位于同一目录下。


打印并分享一下你的folder URL对象长什么样子。 - staticVoidMan
2个回答

5

这是相同的目录,通过获取两个目录的“规范路径”可以验证:

let url1 = URL(fileURLWithPath: "/var/mobile/Containers/")
if let cp = (try? url1.resourceValues(forKeys: [.canonicalPathKey]))?.canonicalPath {
    print(cp)
    // "/private/var/mobile/Containers"

}
let url2 = URL(fileURLWithPath: "/private/var/mobile/Containers/")
if let cp = (try? url2.resourceValues(forKeys: [.canonicalPathKey]))?.canonicalPath {
    print(cp)
    // "/private/var/mobile/Containers"
}

事实上,/var 是指向 /private/var 的符号链接:
var buffer = Array<Int8>(repeating: 0, count: 1024)
if readlink("/var", &buffer, buffer.count) > 0 {
    print(String(cString: &buffer))
    // "private/var"
}

2
对于Swift用户,使用URL.standardizedFileURL可以消除路径中包含软链接或其他不同元素最终解析为同一文件所造成的歧义和困惑。

这似乎比被接受的答案简单一些。在使用URL.standardizedFileURL和使用.canonicalPathKey方法时,是否存在任何不同的情况? - arcdale
我找不到文档表明canonicalPathKey是否会解析为与standardizedFileURL相同的路径表示形式。但我不确定这有什么意义。真正的问题是,是否存在一种情况,在该情况下使用standardizedFileURL将无法工作?我怀疑答案是否定的。只需使用standardizedFileURL即可。 :) - biomiker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接