Проблема с проверкой путей в /Volumes заключается в том, что она также включает внутренние разделы, такие как /Volumes/WINDOWS. Кроме того, хотя и редко, внешние диски могут иметь точки монтирования, отличные от /Volumes.
Правильнее использовать FSGetVolumeParms()
для получения структуры GetVolParmsInfoBuffer
, содержащей информацию о томе, например bIsEjectable
, bIsRemovable
, bIsOnInternalBus
.
Вы можете получить FSVolumeRefNum из FSRef, используя FSGetCatalogInfo()
:
FSCatalogInfo info = {0};
OSErr status = FSGetCatalogInfo(&fsRef, kFSCatInfoVolume, &info, nil, nil, nil);
if (status == noErr)
{
_volumeRefNum = info.volume;
}
С помощью VolumeRef вы можете получить параметры громкости:
FSGetVolumeParms(_volumeRefNum, &_params, sizeof(_params));
_params — это структура GetVolParmsInfoBuffer
, содержащая такую информацию, как:
- (BOOL) isEjectable
{
return (_params.vMExtendedAttributes & (1 << bIsEjectable)) != 0;
}
- (BOOL) isRemovable
{
return (_params.vMExtendedAttributes & (1 << bIsRemovable)) != 0;
}
- (BOOL) isAutoMounted
{
return (_params.vMExtendedAttributes & (1 << bIsAutoMounted)) != 0;
}
- (BOOL) isExternal
{
return (_params.vMExtendedAttributes & (1 << bIsOnExternalBus)) != 0;
}
- (BOOL) isInternal
{
return (_params.vMExtendedAttributes & (1 << bIsOnInternalBus)) != 0;
}
person
Darren
schedule
19.10.2009