【问题标题】:Display Contents of Symbolic Link using NSURL使用 NSURL 显示符号链接的内容
【发布时间】:2014-01-31 15:17:49
【问题描述】:

示例路径:

/用户/Mike/桌面/媒体

我创建了一个指向“媒体”文件夹的符号链接,并将其命名为“我的媒体”。

一切都结束了。现在我想显示 My Media 文件夹的内容以确认符号链接的成功创建。

“targetField”文本框显示正确的路径字符串,符号链接作为 lastPathComponent:

/用户/Mike/桌面/我的媒体

在 Mavericks 之前,以下代码将在 Finder 窗口中显示符号链接文件夹的内容:

NSString *path = [targetField stringValue];
NSURL *fileURL = [NSURL fileURLWithPath:path];
NSArray *fileURLs = [NSArray arrayWithObjects:fileURL, nil];
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];

在 Mavericks 中,代码现在打开原始 Target 文件夹,而不是 Symbolic Link 文件夹。我意识到技术上两个文件夹的内容是相同的。但关键是代码不再将符号链接反映为新路径中的最后一个组件。它恢复到目标文件夹(媒体)并打开它。

我的描述有意义吗?有没有办法像在小牛队之前那样进行这项工作?

谢谢。

【问题讨论】:

    标签: cocoa nsurl


    【解决方案1】:

    你的描述对我来说完全没有意义。 “从技术上讲,两个文件夹的内容是相同的”没有意义,如果您有一个文件夹的符号链接,那么您只有 一个 文件夹,而不是两个具有相同内容的文件夹。所以我不确定你在问什么,但这里有一个猜测:

    在 Mountain Lion 下运行您的代码会打开一个显示桌面并突出显示“我的媒体”的 Finder 窗口。要打开同一个窗口,但不突出显示,您可以在路径的父文件夹上使用 openURL:openFile:。例如。使用网址:

    NSURL *fileURL = [NSURL fileURLWithPath:path.stringByDeletingLastPathComponent];
    [NSWorkspace.sharedWorkspace openURL:fileURL];
    

    或者只是使用字符串:

    [NSWorkspace.sharedWorkspace openFile:path.stringByDeletingLastPathComponent];

    附录

    经过澄清,我认为您所追求的是:

    [NSWorkspace.sharedWorkspace selectFile:path 
                   inFileViewerRootedAtPath:path.stringByDeletingLastPathComponent];
    

    selectFile:inFileViewerRootedAtPath: 方法被定义为跟随符号链接。在 Mavericks 下,这会突出显示链接本身。

    HTH

    【讨论】:

    • 我很抱歉不清楚。我知道,如果您有指向目标的符号链接 - 您只有一个文件夹。我指的是您打开目标文件夹或符号链接文件夹时所看到的内容。显然,内容是一样的。我要说的是(你是对的)Lion/Mountain Lion 中的代码会打开一个突出显示“我的媒体”的 Finder 窗口。但是 - 这在小牛队中的工作方式不同。该代码将打开一个 Finder 窗口,其中突出显示了目标文件夹“Media”。我正在尝试重现它在 Lion/Mountain Lion 中的工作方式。你和我一起吗?
    • 谢谢,但仍然不适合我。更新后的代码仍然突出显示目标,而不是符号链接文件夹 - 即使新路径字符串是准确的。(用户/迈克/桌面/我的媒体)。它确实有意义,因为您正在实现 stringByDeletinLastPathComponent 这实际上是我想要的强调。我试过 inFileViewerRootedAtPath:path。它仍然突出显示目标文件夹。想不通...
    • @Paul - 我已经在 10.9.1(最新的公开版本)中使用相同的名称“媒体”和“我的媒体”对此进行了测试,其中“我的媒体”是一个符号链接(a ) 到“媒体”和 (b) 到“媒体”的完整路径。在这两种情况下,Finder 都会打开一个桌面窗口并突出显示“我的媒体”——根据文档,它不会解析符号链接。 (该方法的第二个参数是 Finder 应该在窗口中显示的文件夹,第一个参数是它应该在该窗口中突出显示的项目,因此是 stringByDeletingLastPathComponent。)
    • 我终于明白了。再一次感谢你的帮助。当我打开沙盒时,问题仍然存在。该操作不会突出显示创建的 symLink 文件夹。关闭沙盒 - 它可以正常工作。我错过了什么?
    • @Paul - 已确认,您遇到了 YASB。您的应用程序控制台应显示“沙盒扩展创建失败”类似的内容。开发人员报告此特定错误消息并不少见。向 Apple 提交错误报告,包括来自控制台应用程序的信息。如果您是开发人员,请在论坛上询问是否有人想出了解决方法。如果您的目标不是 App Store,只需关闭沙盒即可。顺便说一句,我测试了使用相对路径和绝对路径权利提供临时例外 - 两者都不起作用,所以你可以尝试两个更少的选择。祝你好运!
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2019-05-14
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多