在Apple Mac OS X上的PyQt4中,我们以下列格式获得拖放文件file reference URL:
domain.com/main.js
有趣的是,这不是一个有效的文件URL,或者至少它在大多数应用程序中没有透明地解决 - 文件系统中没有file:///.file/id=123456.78901
文件。
只使用shell,如何将此NSURL或文件引用或别名(或其他任何名称)取消引用到文件系统上的文件的有效路径中?
答案 0 :(得分:2)
可以在默认OS X安装中使用osascript
AppleScript解释器,使用以下脚本运行:
osascript -e 'get posix path of posix file "file:///.file/id=123.456" -- kthxbai'
打印/Users/josh/Downloads/paste-10837081.py
。
答案 1 :(得分:2)
在Swift中,您可以使用URL.standardized从参考URL获取有效路径。所以在Swift 4中 - 要从拖放文件中获取文件名,你可以做类似......
let fileType = NSPasteboard.PasteboardType (kUTTypeFileURL as String)
extension NSPasteboardItem {
func fileURL ()->URL? {
if let refURL = self.string(forType: fileType) {
return URL (fileURLWithPath: refURL).standardized
}
return nil
}
}
答案 2 :(得分:0)
可惜你说'只是shell',因为这个答案取决于PyObjC:Foundation.NSURL.alloc().initWithString_(url).fileSystemRepresentation()
接受file:///.file/id=123456.78901
返回b'/Users/dave/Desktop/testbox/dest'
答案 3 :(得分:0)
这是一个NSURL对象,可以从中获取路径:
NSString *filePath = [fileURL path];
答案 4 :(得分:0)
这也可以使用 PyObjC 桥在 Python 中完成。
from Foundation import NSURL # depends on PyObjC
# convert a URL file reference to a POSIX path
NSURL.URLWithString_('file:///.file/id=6571367.8602676692').path()
# convert a path file reference to a POSIX path
NSURL.fileURLWithPath_('/.file/id=6571367.8602676692').path()
请务必为您的数据类型选择合适的 NSURL 方法,否则您会得到错误的值。