【问题标题】:Cocoa: detect unmountable volumeCocoa:检测无法安装的卷
【发布时间】:2011-03-29 00:10:20
【问题描述】:

各位,

我正在开发一个应该能够卸载卷的小应用程序。

目前,我正在使用以下代码来确定卷是否不可挂载:

BOOL isRemovable, isWritable, isUnmountable;
NSString *description, *type;

BOOL succ = [ws getFileSystemInfoForPath:[itemInfo objectForKey:@"path"]
                isRemovable:&isRemovable
                isWritable:&isWritable
                isUnmountable:&isUnmountable
                description:&description
                type:&type];

问题是只有物理可移动卷(如 CD 或 DVD)才能获得 isUnmountable=YES 标志。 USB 设备不会,尽管这些设备也无法安装。

你们有解决办法吗?

---- 编辑

我用另一个 FAT 格式的 U 盘试​​了一下。我有 2 个 USB 硬盘连接到我的 mac,这些硬盘无法通过 Finder 或磁盘实用程序安装 - 这些是 HFS 格式的。我创建了一个使用上面代码的输出:

/,hfs,不可安装:否,可移动:否
/Volumes/Elephant,hfs,不可安装:否,可移动:否
/Volumes/Time Machine,hfs,不可安装:否,可移动:否
/Volumes/USBSTICK,msdos,不可挂载:是,可移动:是

看起来该方法仅在设备为 FAT 或 MSDOS 格式时才返回 YES。这很奇怪,因为其他 2 个(Elephant、Time Machine)是通过 USB 连接的卷,并且必须是可移动和不可安装的。是否有其他方法可以获取该信息或我在代码中做错了什么?

--

问候

马可

【问题讨论】:

    标签: objective-c cocoa filesystems unmount


    【解决方案1】:

    使用您的确切代码和我自己的 USB 记忆棒(1GB Cruzer - 是的,我知道我落后了),我得到了 isRemovable 的“是”。

    虽然 BOOL 通常表示为 YES 或 NO,但 TRUE 有效。为了确保这一点,我也进行了测试。我每次都得到 isRemovable == TRUE/YES。

    因此,由于条件“可以卸载/删除”可能取决于某些东西是否实际使用了卷上的资源,这很可能是阻止此方法回答“继续卸载它”的原因。您问题中的更多上下文可能有助于识别某些内容。

    【讨论】:

    • 感谢您的意见。我用更多的上下文编辑了我的帖子,并自己用 U 盘再次尝试了代码。你知道为什么它只适用于 MSDOS 格式的设备吗?
    • 我刚刚擦拭并重新格式化了我的棒为 HFS+ 并重复了测试。工作正常。 isUnmountable 和 isRemovable 都是 YES。
    • 嗯... 那么为什么 U 盘可以工作而 U 盘不能呢?听起来不像真正的问题。相同的代码行为不同肯定是有原因的。顺便说一句:我正在使用 10.6.4 以及最新的开发工具...
    • 我正在使用相同的环境。完全不确定发生了什么。刚刚检查了一个 2 分区 HFS+ USB 硬盘驱动器。再次,工作正常。 :-} 您可能应该命名硬件。此外,在新创建的用户帐户下进行测试(您当前的帐户已注销),以确保没有“非香草”在用户空间中忙于您的驱动器。下一步是在全新的 OS X 安装上对其进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2021-10-15
    相关资源
    最近更新 更多