OS X Application How to get allocation blocks(cluster size) of a volume

Viewed 68

I want to get size (in bytes) of allocation blocks of a removable volume. In my Macos application, I use FSGetVolumeInfo method to get FSVolumeInfo object. In FSVolumeInfo object, attribute "blockSize" is the right one. However, method FSGetVolumeInfo is deprecated after Macos10.8. Is there any function to replace? Below is sample code with 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 Answers

I would look into standard c function calls I think, statvfs() does what you want.

Related