【问题标题】:How can I get a UNC path for a file that is accessed through a network drive?如何获取通过网络驱动器访问的文件的 UNC 路径?
【发布时间】:2012-03-03 06:14:23
【问题描述】:

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

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

【问题讨论】:

  • 您的意思是某个用户在服务器\\some-server\some\root 上映射了一个网络驱动器X:\some\file,并且您想找出原始服务器的UNC 路径,例如:\\some-server\\some\root\some\file
  • 卡隆先生,我就是这个意思。
  • 不幸的是,这个例子使用.NET,这不是我的情况。
  • @Paradoxyde:该示例使用 Win32API 和 .NET 语法。您可能可以通过删除编组来直接翻译。

标签: c++ visual-c++ mfc path directory


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    建议你使用 WNetGetConnection。

    API 说明在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/aa385453(v=vs.85).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多