Как я могу получить UNC-путь для файла, доступ к которому осуществляется через сетевой диск? - PullRequest
6 голосов
/ 10 февраля 2012

Я работаю над приложением в VC ++, где сетевые диски используются для доступа к файлам. Диски назначаются вручную пользователями и затем выбирают диск в приложении. Это приводит к тому, что диски не всегда отображаются на одни и те же серверы.

Как мне узнать путь UNC к такому файлу? Это в основном для целей идентификации.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

вот функция, которую я использую для преобразования обычного пути в путь UNC:

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;;
} 
1 голос
/ 13 февраля 2012

Предлагаем вам использовать WNetGetConnection.

Описание API здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385453(v=vs.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...