如何获取通过网络驱动器访问的文件的 UNC 路径?

2022-01-12 00:00:00 path directory visual-c++ c++ mfc

我正在使用 VC++ 开发一个使用网络驱动器访问文件的应用程序.驱动器由用户手动分配,然后在应用程序中选择驱动器.这会导致驱动器并不总是映射到相同的服务器.

I am working on a application in VC++ where network drives are used to access files. The drives are assigned manually by the users and then select the drive in the application. This results in drives not always being mapped to the same servers.

如何获取此类文件的 UNC 路径?这主要用于识别目的.

How would I go about obtaining the UNC path to such a file? This is mostly for identification purposes.

推荐答案

这是我用来将普通路径转换为 ??UNC 路径的函数:

here's the function I use to convert a normal path to an UNC path:

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;;
} 

相关文章