【问题标题】:Get path from OS X file reference URL alias (file:///.file/id=...)从 OS X 文件参考 URL 别名获取路径(file:///.file/id=...)
【发布时间】:2016-09-18 00:16:48
【问题描述】:

在 Apple Mac OS X 上的 PyQt4 中,我们得到一个file reference URL 以拖放到以下格式的文件中:

file:///.file/id=123456.78901

有趣的是,这不是一个有效的文件 URL,或者至少在大多数应用程序中它不能透明地解析 - 文件系统中没有 /.file/id=... 文件。

仅使用 shell,我如何将这个 NSURL 或文件引用或别名(或其他任何名称)取消引用到文件系统上文件的有效路径中?

【问题讨论】:

    标签: macos shell url path


    【解决方案1】:

    可以使用osascript,在默认 OS X 安装上可用的 AppleScript 解释器,使用以下脚本运行:

    osascript -e 'get posix path of posix file "file:///.file/id=123.456" -- kthxbai'
    

    打印/Users/josh/Downloads/paste-10837081.py

    【讨论】:

    • 好的。有效。我不得不写 osascript(...)。它在没有“-e”的情况下工作
    • Python(例如在 virtualenv 中)可能缺少适当的 osascript 包。因此,在 subprocess 中运行以上 shell 命令会更安全。
    【解决方案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
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是一个 NSURL 对象,从中获取路径:

      NSString *filePath = [fileURL path];
      

      【讨论】:

        【解决方案4】:

        这也可以在 Python 中使用 PyObjC 桥来完成。

        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 方法,否则你会得到错误的值。

        资源

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 2020-01-24
          • 2014-01-25
          • 1970-01-01
          • 2011-10-20
          • 2011-08-12
          相关资源
          最近更新 更多