Как вы получаете исходное местоположение смонтированного пути? - PullRequest
3 голосов
/ 30 декабря 2008

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

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

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

Спасибо

Адам

Ответы [ 3 ]

1 голос
/ 30 декабря 2008

Если вы использовали SUBST, вам нужен API QueryDosDevice. Вы можете ПОДПИСАТЬ вещи самостоятельно, используя DefineDosDevice.

0 голосов
/ 30 декабря 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;;
} 
0 голосов
/ 30 декабря 2008

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

Символическое поведение ссылки

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

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

...