【发布时间】:2017-02-10 21:09:03
【问题描述】:
我无法获得在 Swift 中工作的文件引用 URL。首先,Swift 的 URL 类型甚至没有定义将文件路径 URL 转换为文件引用 URL 的方法。 NSURL 有这样的方法:fileReferenceURL() -> URL?,但我不知道如何让它工作。
我尝试了什么:
let myURL = URL(string: "file:///Users/Me/Desktop/CoolFolder")!
let refURL = (myURL as NSURL).fileReferenceURL()!
NSLog("\(myURL)") // file:///Users/Me/Desktop/CoolFolder (ok)
NSLog("\(refURL)") // file:///Users/Me/Desktop/CoolFolder (wha?!?)
logFolderContents() // Logs contents of folder pointed to by refURL
// ...
// Rename CoolFolder -> UncoolFolder in Finder.
// ...
logFolderContents() // Fails!
// ...
// Rename UncoolFolder -> CoolFolder.
// ...
logFolderContents() // Successfully logs contents again.
基本上,refURL 继续指向原始文件路径。对fileReferenceURL() 的调用似乎没有任何作用。
如何在 Swift 中获取文件引用 URL?
更新: 用户@Sam 在 cmets 中指出,这似乎是 Swift 3 回归错误,如下所述:https://bugs.swift.org/browse/SR-2728。请访问链接并对此错误进行投票。该线程还包含一个解决方法。
【问题讨论】:
-
您期望
refURL具有什么价值? -
我希望它看起来像这样:file:///.file/id=6571367.2773272/。文件引用 URL 不包含路径名,而是一个唯一的 ID。当路径名称更改(资源被重命名或移动)时,ID 仍然指向相同的资源。见developer.apple.com/library/prerelease/content/documentation/…
-
作为测试,将第一行更改为:
let myURL = URL(fileURLWithPath: "/Users/Me/Desktop/CoolFolder") -
@rmaddy 结果相同。
-
看起来这是一个已知的错误:bugs.swift.org/browse/SR-2728
标签: swift cocoa filesystems nsurl