Я сделал функцию резервного копирования usb для своего кроссплатформенного приложения, она отлично работает для Windows, но у меня возникают проблемы с поиском способа поиска меток тома и пути в Mac OSX IE «F: / USB123». Как мне лучше всего / легче всего добиться эквивалентности приведенного ниже кода для Mac? — Я знаю, что не могу использовать Win API, поэтому у меня вопрос о том, чем его заменить.
Я включил структуру для кода ниже.
Функция возвращает количество найденных внешних USB-накопителей и заполняет два вектора меткой и путем к каждому USB-устройству соответственно.
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;
}
Задача ещё не решена.
Других решений пока нет …