Как вы получаете исходное местоположение смонтированного пути?
В C++, как я могу получить местоположение подключенного диска? например, если я смонтировал диск s: to c:\temp (используя subst в командной строке) "subst c:\temp s:" как я могу получить "c: \ temp", передав "s:"
Также хотелось бы узнать, как это можно сделать для сетевого диска. (если s: смонтирован в "\MyComputer\Hello", то я хочу получить "\MyComputer\Hello", а затем извлечь "c: \ Hello" из этого)
Это может быть очень простой вопрос, но я просто не могу найти информацию об этом.
Спасибо,
Адам
3 ответа
Если вы использовали SUBST, вам нужен API QueryDosDevice. Вы можете ПОДПИСАТЬ вещи самостоятельно, используя DefineDosDevice.
Вероятно, вы можете использовать функцию GetVolumeInformation. Из документации:
Символическое поведение ссылки
Если путь указывает на символическую ссылку, функция возвращает информацию об объеме для цели.
Хотя сам не проверял.
Чтобы найти путь к подключенному сетевому ресурсу, вы должны использовать API-интерфейсы WNet:
wstring ConvertToUNC(wstring sPath)
{
WCHAR temp;
UNIVERSAL_NAME_INFO * puni = NULL;
DWORD bufsize = 0;
wstring sRet = sPath;
//Call WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL option
if (WNetGetUniversalName(sPath.c_str(),
UNIVERSAL_NAME_INFO_LEVEL,
(LPVOID) &temp,
&bufsize) == ERROR_MORE_DATA)
{
// now we have the size required to hold the UNC path
WCHAR * buf = new WCHAR[bufsize+1];
puni = (UNIVERSAL_NAME_INFO *)buf;
if (WNetGetUniversalName(sPath.c_str(),
UNIVERSAL_NAME_INFO_LEVEL,
(LPVOID) puni,
&bufsize) == NO_ERROR)
{
sRet = wstring(puni->lpUniversalName);
}
delete [] buf;
}
return sRet;;
}