Как получить исходное местоположение смонтированного пути?

В С++, как я могу получить местоположение подключенного диска? например, если я смонтировал диск s: в c:\temp (используя subst в командной строке) «subst c:\temp s:», как я могу получить «c:\temp», передав «s:»

Я также хотел бы знать, как это можно сделать для сетевого диска. (если s: подключен к "\MyComputer\Hello", тогда я хочу получить "\MyComputer\Hello", а затем получить из него "c:\Hello")

Это может быть очень простой вопрос, но я просто не мог найти информацию об этом.

Спасибо,

Адам


person Adam Oren    schedule 30.12.2008    source источник


Ответы (3)


Если вы использовали SUBST, вам нужен API QueryDosDevice. Вы можете самостоятельно SUBST использовать DefineDosDevice.

person Roger Lipscombe    schedule 30.12.2008

Вероятно, вы можете использовать функцию GetVolumeInformation. Из документации:

Поведение символической ссылки

Если путь указывает на символическую ссылку, функция возвращает информацию о томе для цели.

Хотя сам не проверял.

person csl    schedule 30.12.2008

Чтобы найти путь к подключенному сетевому ресурсу, вы должны использовать WNet API:

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;;
} 
person Stefan    schedule 30.12.2008