在Mac OS X中,仅通过给定文件路径以编程方式挂载磁盘/卷

5
我有一组文件路径。这些路径可能导致未安装卷上的文件。我如何在尝试访问文件之前通过编程告诉操作系统挂载卷?
我知道这是可能的,因为iTunes似乎可以做到。例如,如果我在iTunes中播放位于未安装的网络附加卷上的歌曲,则会自动为我挂载该卷。
如果我尝试以指定的路径通过编程打开文件,操作系统是否应自动为我挂载卷?还是我需要使用磁盘仲裁框架或类似的东西手动挂载驱动器?
如果我需要使用磁盘仲裁框架,具体需要完成哪些工作?
2个回答

3

简短回答:无需涉及“磁盘仲裁框架”。别名管理器可以为您处理所有内容。

Chris Suter已经非常接近了。从API的角度来看,有两种解决方案:

  1. 别名。在OSX之前的MacOS中就已经存在了,它们是结构化文件,包含多种定位文件或文件夹的方式,即使它们被移动或重命名了。它们还包含关于它们所在卷的信息,包括如果它在网络卷上的挂载信息。如果您只需使用Finder菜单中的“创建别名”命令创建文件的别名,然后将其重命名或移动,或卸载其卷,您就可以看到这些别名实际上在起作用。Finder将尝试将卷带回来,甚至会要求您提供登录信息。还有“别名管理器”API,其中包括函数FSResolveAliasFileWithMountFlags,它正是您所要求的:它不仅可以找到别名的目标,而且还可以选择是否使磁盘在未安装时可用,以及是否需要用户登录。

  2. CFURL书签。这是Alias API的现代替代品,仅存在于OSX 10.6之后。CFURL书签由系统在运行时更好地管理。我不知道它们是否有与经典别名文件相同的等效磁盘文件表示,但也许它们甚至是完全相同的。

无论如何,这些应该是你所需的所有指针,我希望。

不幸的是,CFURL书签(以及可能的别名)在我的情况下无法使用。为了使用书签,在创建书签时必须挂载卷。由于我从第三方程序创建的文件中获取路径列表,因此我无法保证在获取路径时卷已经挂载,以便下次可以创建书签。 - BigMacAttack
也许有一种方法可以从第三方程序中获取书签?或者根据给定的文件路径推导出要挂载的卷? - BigMacAttack
嗯...那个第三方程序能挂载丢失的卷吗?如果可以,那么它肯定有相关信息,你只需要找到它。不过,我认为Disk Arb框架并不适用于这种情况,因为它只处理本地磁盘和/或告诉你何时挂载磁盘。这是关于iTunes的问题吗?我自己处理过iTunes的库,如果我没记错的话,它只包含路径,如果一个卷丢失了,在尝试访问这样的丢失文件时它不会自动挂载,对吗? - Thomas Tempelmann
1
原来iTunes确实可以重新挂载这些卷。而且它显然是使用别名(我在iTunes忙于挂载网络卷时得到了一个“代码示例”,显示它调用FSMatchAliasBulk和FSMountServerVolumeSync)。但是库文件的xml版本仅包含原始路径,而不是别名。因此,您需要尝试通过AppleScript API获取它... - Thomas Tempelmann
哦,糟糕!AppleScript也无济于事。如果未挂载音轨,则无法获取其位置。这只能让你尝试解密.itl文件,但看起来并不像表面上那么容易,因为它可能被编码或加密了。唯一的其他方法是要求用户先挂载丢失的卷,然后创建它们的别名,以便稍后可以自动重新挂载它们。 - Thomas Tempelmann
显示剩余2条评论

1

你尝试过使用别名吗?我认为它们现在被称为书签。当你解析它们时,它们可能会导致卷被挂载。


Chris,请看一下我在Thomas的帖子上的评论。 - BigMacAttack

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