如何查找Mac上是否确实存在已安装的驱动器

时间:2015-04-06 16:41:55

标签: c++ macos cocoa boost filesystems

我实际想要实现的是找出我从网络安装的驱动器何时断开连接。 我用一个非常简单的方法开始,我使用了:

升压::文件系统::存在

在驱动器的安装路径上(我们可以在/ Volumes /中找到)。 例如在计算机上的驱动器: SMB:// XYZ /驱动 安装后,我可以看到它像: /卷/驱动器 后来是我使用boost :: filesystem :: exists,

的驱动器

所以我希望一旦断开网络连接,就会立即清除/ Volumes中挂载的卷,一切都会正常工作。

,但 后来我意识到在网络断开连接上OSX需要永远从/ Volumes目录清除驱动器。

是否有苹果API可以判断/ Volumes中显示的已计量量是否有效。

提前致谢。

2 个答案:

答案 0 :(得分:1)

NSFileManager上有一种方法可让您轻松查看已装载的卷:

  

- (NSArray*) mountedVolumeURLsIncludingResourceValuesForKeys:option - 返回一组URL,用于标识计算机上可用的已装入卷。

我不知道这是如何解决陷入困境的坐骑。您还需要确定这些已安装的卷是网络卷还是磁盘映像。

如果您想在卷来来往时收到通知,可以使用File System Events API。这是一个更低级别,但你基本上可以要求它'/Volumes/*下的结构发生变化时通知我。

答案 1 :(得分:1)

您想要NSWorkspace' s notifications

  • NSWorkspaceDidRenameVolumeNotification
  • NSWorkspaceDidMountNotification
  • NSWorkspaceWillUnmountNotification
  • NSWorkspaceDidUnmountNotification

最后三个通知在@"NSDevicePath"字典中包含userInfo键。如果强行删除设备,则WillUnmount不会被发送,DidUnmount会执行此操作。使用两者的组合,你可以得到一个适当的警告,以及#34;好的卸载"在一个理想的情况下处理事物的网络卷,但在所有情况下,我都没有任何真正的问题依赖于DidUnmount来告诉我一个卷消失了。我在自2003年以来一直在推出的应用中运送代码时使用此功能。

相关问题