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

6
我正在使用VC++编写一个应用程序,其中使用网络驱动器来访问文件。用户手动分配驱动器,然后在应用程序中选择驱动器。这会导致驱动器不总是映射到相同的服务器。
如何获取此类文件的UNC路径?这主要是为了识别目的。

1
你的意思是某个用户在服务器\\some-server\some\root上映射了一个网络驱动器X:\some\file,而你想找出原始服务器的UNC路径,例如:\\some-server\\some\root\some\file - André Caron
是的,Caron先生,那正是我所指的。 - Paradoxyde
1
请参见此处 - https://dev59.com/OHI95IYBdhLWcg3w-DL0 - JSacksteder
很不幸,这个示例使用的是.NET,而这并不适用于我的情况。 - Paradoxyde
1
@Paradoxyde:这个例子使用了.NET语法的Win32API。你可以通过删除marshalling cruft来得到直接的翻译。 - André Caron
2个回答

8

这是我用来将普通路径转换为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接