【问题标题】:How to identify a mounted device as removable?如何将已安装的设备识别为可移动设备?
【发布时间】:2013-04-19 14:22:22
【问题描述】:

如何确定已安装的设备是否可以卸载/弹出?

我尝试在NSFileManager 的帮助下获取所有设备。

NSArray *keys = [NSArray arrayWithObjects:NSURLVolumeNameKey, NSURLVolumeURLForRemountingKey, NSURLVolumeIsEjectableKey, NSURLVolumeIsRemovableKey, nil];
NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:keys options:0];

for (NSURL *url in urls) 
{
NSError *error;
NSNumber *isRemovable;
NSString *volumeName; 

[url getResourceValue:&isRemovable forKey:NSURLVolumeIsRemovableKey error:&error];
[url getResourceValue:&volumeName forKey:NSURLVolumeNameKey error:&error];

NSLog(@"Standard Device : %@ - Removable: %c", volumeName, [isRemovable boolValue]);

}

但是当我遍历列表时,我总是得到这个,例如:

Standard Device Name: My Book - isEjectable:

仅供参考,“我的书”是一个 USB 驱动器。

希望有人能指出问题所在。

谢谢

【问题讨论】:

  • 您的日志行应该如下所示: NSLog(@"Standard Device : %@ - Removable: %@", volumeName, [isRemovable boolValue] ? @"yes" : @"no") ;但我在此列表中没有可移动或可弹出驱动器。
  • 嗯,这使日志记录更清晰,但结果是一样的,我的 USB 驱动器没有被识别为可移动设备。
  • “可移动设备”和“可移动媒体”是有区别的。 USB 使概念变得模糊,因为您可以插入 USB 记忆棒或带有固定介质的 SSD 或带有可移动介质的 DVD 驱动器等介质。

标签: objective-c cocoa


【解决方案1】:

你想要NSURLVolumeIsEjectableKey 而不是NSURLVolumeIsRemovableKey

NSURLVolumeIsRemovableKey 表示可以从设备中物理移除媒体。 NSURLVolumeIsEjectableKey 表示可以卸载卷。

【讨论】:

  • 很遗憾结果是一样的,'NSURLVolumeIsEjectableKey'和'NSURLVolumeIsRemovableKey'好像都没有填满
  • 嗯——是的——我刚刚运行了类似的代码,也没有看到 IsEjectable/IsRemovable 是 YES。多么奇怪。我现在没有时间调试这个,但很快就会尝试这样做(因为我的好奇心现在已经被彻底激怒了)。
  • 在我的 2013 MacBook Air 上,我还没有发现这两个键具有不同值的任何设备。
  • @hippietrail 尝试安装一个可移动媒体,然后将 CD 放入该媒体上的目录并打开一个文件。这可能会引发差异。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多