macos — Как мне перечислить тома на MacOSX в C ++?

Я новичок в разработке Mac / XCode. Я пытаюсь сделать то, что, по моему мнению, должно быть предельно простым, но более недели исследований не дали никаких результатов.

Я хочу перечислить внешний USB-накопитель, доступный как вектор строк.

Я не хочу их загадочную информацию, такую ​​как серийный адрес или что-то еще. Я просто хочу их пути IE: «D: /» или «Sandisk USB».

Я выполнил это в Windows довольно легко, используя приведенный ниже код, но, узнав, как это сделать на Mac, я потянул себя за волосы.

Единственное, что я нашел, похоже, сделано для Цели С, — Как перечислить тома в 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;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]