我是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;
}