Я новичок в разработке 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;
}
Задача ещё не решена.
Других решений пока нет …