Если вы говорите о запоминающем устройстве USB без присвоенной ему буквы, то это просто том без точки монтирования. Перед чтением / записью тома необходимо смонтировать.
Вы можете использовать функции управления томами :
Вот быстро написанный пример на языке C, в котором перечислены все существующие тома, смонтированы несмонтированные и показана некоторая информация о каждом томе:
char volumeID[256], volumePathName[256], volumeName[256], volumeFS[256];
char newMountPoint[4] = " :\\";
unsigned long volumeSerialNumber;
unsigned long size;
HANDLE handle = FindFirstVolume(volumeID, 256);
do {
printf("Volume GUID = %s\n", volumeID);
GetVolumePathNamesForVolumeName(volumeID, volumePathName, 256, &size);
if(strlen(volumePathName) == 0) {
printf("Not mounted\n");
newMountPoint[0] = firstFreeLetter();
if(SetVolumeMountPoint(newMountPoint, volumeID)) {
GetVolumePathNamesForVolumeName(volumeID, volumePathName, 256, &size);
printf("Now mounted on %s\n", volumePathName);
}
}
else {
printf("Mounted on %s\n", volumePathName);
}
GetVolumeInformation(volumePathName, volumeName, 256, &volumeSerialNumber,
NULL, NULL, volumeFS, 256);
printf("Volume name = %s, FS = %s, serial = %lu\n\n",
volumeName, volumeFS, volumeSerialNumber);
}while(FindNextVolume(handle, volumeID, 256));
FindVolumeClose(handle);
Я намеренно упрощаю этот пример, но у тома может быть несколько точек монтирования (volumePathName
на самом деле многострочный). Он использует эту функцию, чтобы получить первую доступную букву (после 'C'
) для монтирования диска:
char firstFreeLetter() {
unsigned long freeLetters = GetLogicalDrives();
if(freeLetters < 4) return 0;
char letter = 'C';
for(unsigned long i=4; (freeLetters & i) != 0; ++letter, i <<= 1);
return letter;
}
person
zakinster
schedule
30.04.2013