Приложение OS X Как получить блоки выделения (размер кластера) тома - PullRequest
0 голосов
/ 11 января 2019

Я хочу получить размер (в байтах) блоков выделения съемного тома. В моем приложении Macos я использую метод FSGetVolumeInfo, чтобы получить объект FSVolumeInfo. В объекте FSVolumeInfo атрибут "blockSize" является правильным. Однако метод FSGetVolumeInfo устарел после Macos10.8. Есть ли функция для замены? Ниже приведен пример кода с FSVolumeInfo:

const char* path = "/Volumes/Untitled";

FSCatalogInfo   volCatalogInfo;

FSVolumeRefNum  realVolRefNum;

FSVolumeInfo     myVolumeinfo;


if ('\0' != path[0]) {

    CFStringRef pathStr = CFStringCreateWithCString(kCFAllocatorDefault, path, kCFStringEncodingUTF8);

    CFURLRef volumePath = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, pathStr, kCFURLPOSIXPathStyle, false);

    FSRef volumeRef;

    if (CFURLGetFSRef(volumePath, &volumeRef)) {

        OSStatus err = FSGetCatalogInfo(&volumeRef, kFSCatInfoVolume, &volCatalogInfo, NULL, NULL, NULL);

        if (noErr == err) {

            FSVolumeRefNum volRefNum = volCatalogInfo.volume;

            err = FSGetVolumeInfo(volRefNum, 0, &realVolRefNum, kFSVolInfoGettableInfo, &myVolumeinfo, NULL, NULL);

            if (noErr == err) {

                printf("get volume info success!");

            }

        }

    }

}

1 Ответ

0 голосов
/ 11 января 2019

Я бы посмотрел на стандартные вызовы функций c, я думаю, statvfs () делает то, что вы хотите.

...