c++ - 在 Mac OS X 中仅使用给定的文件路径以编程方式挂载磁盘/卷

标签 c++ macos mount diskarbitration

我有一个文件路径列表。这些路径可能指向未安装的卷上的文件。在我尝试访问文件之前,我如何以编程方式告诉操作系统挂载该卷?

我知道这在某种程度上是可能的,因为 iTunes 似乎可以做到这一点。例如,如果我开始播放位于 iTunes 中未安装的网络附加卷上的歌曲,该卷会自动为我安装。

如果我尝试在指定路径以编程方式打开文件,操作系统是否应该自动为我安装卷?或者我是否需要使用磁盘仲裁框架或类似工具手动安装驱动器?

如果我需要使用Disk Arbitration框架,具体需要做什么?

最佳答案

简短的回答:不需要搞乱“磁盘仲裁框架”。别名管理器可以为您处理这一切。

Chris Suter 已经非常接近了。 API 方面有两种解决方案:

  1. 别名。这些已经存在于 OSX 之前的 MacOS 中,并且是结构化文件,包含多种定位文件或文件夹的方法,即使它已被移动或重命名。它们还包含有关它们所在的卷的信息,如果它在网络卷上,则包括安装信息。如果您只是创建一个文件的别名(使用 Finder 的"file"菜单中的“制作别名”命令),然后重命名或移动它,或者卸载它的卷,您就可以亲眼看到这些操作。 Finder 将尝试取回卷,必要时甚至会要求您提供登录信息。还有“别名管理器”API,包括函数 FSResolveAliasFileWithMountFlags,这正是您所要求的:它不仅可以让您找到别名的目标,还可以选择磁盘在卸载时是否可用,以及是否如有必要,应要求用户登录。

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

无论如何,我希望这些应该是您需要的所有指示。

关于c++ - 在 Mac OS X 中仅使用给定的文件路径以编程方式挂载磁盘/卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426063/

相关文章:

linux - 使用 newfs 文件系统创建可挂载镜像

c++ - 指向指针函数的函数指针

c++ - boost 原子类使初始化值不同于成员初始化列表

c - 在 OS X 上生成 MD5 密码

ubuntu - 如何使用 S3QL 在 aws s3 中列出对象

Linux 逻辑卷管理器

c++ - 为什么大多数 STL 实现中的代码如此复杂?

python - 如何终止在后端执行长时间运行的 C/C++ 代码的 python 解释器?

macos - OSX : Put terminal window as tab in another one

objective-c - Cocoa/Obj-C - 计算 XML 文件中的元素数量