如何在C ++中枚举MacOSX上的卷?

时间:2018-01-22 17:23:18

标签: c++ macos usb-drive

我是Mac开发/ xcode的新手。我正在尝试做我认为应该非常简单的事情,但是一周的研究没有产生任何结果。

我想列出外部USB驱动器作为字符串向量。

我不希望他们这些神秘的信息如地址序列或任何东西。我只想要他们的路径IE:“D:/”或“Sandisk USB”。

我使用下面的代码很容易在Windows中完成了这个,但是在Mac上找到如何做到这一点让我把头发拉了出来。

我发现的唯一目标似乎是针对目标C, - How to enumerate volumes on Mac OS X? 但我的项目使用c ++。

有人可以提供一个简单的例子,或指出我正确的方向。

struct ESDriveDescription
{
    std::string path;
    std::string label;

    ESDriveDescription() = default;
    ESDriveDescription(const std::string &path, const std::string &label)
        : path(path), label(label)
    {}
};



int ESFileUtils::getExternalStorageDevicePaths(vector<ESDriveDescription> &paths){
        // Letters in alphabet * 3 characters per drive path, + nul term + final nul
        // NOTE: constexpr not supported in vs2013
        static const DWORD DRIVE_BUFFER_SIZE = 26 * 4 + 1;
        static const DWORD VOLUME_LABEL_MAX = 32;

        const char* removableDriveNames[26] = { 0 };
        char allDrives[DRIVE_BUFFER_SIZE] = { 0 };
        int numRemovableDrives = 0;

        DWORD n = GetLogicalDriveStringsA(DRIVE_BUFFER_SIZE, allDrives);
        for (DWORD i = 0; i < n; i += 4) {
            const char* driveName = &allDrives[i];

            UINT type = GetDriveTypeA(driveName);
            if (type == DRIVE_REMOVABLE)
                removableDriveNames[numRemovableDrives++] = driveName;
        }

        char label[VOLUME_LABEL_MAX] = { 0 };
        for (int i = 0; i < numRemovableDrives; i++) {
            const char* driveName = removableDriveNames[i];
            GetVolumeInformationA(driveName, label, VOLUME_LABEL_MAX, 0, 0, 0, 0, 0);
            paths.emplace_back(driveName, label);
        }

        return numRemovableDrives;
    }

0 个答案:

没有答案