2012-02-10 93 views
6

我工作在一个VC++应用程序,其中网络驱动器用于访问文件。驱动器由用户手动分配,然后在应用程序中选择驱动器。这导致驱动器不总是映射到相同的服务器。如何获取通过网络驱动器访问的文件的UNC路径?

我怎么会去获得这样的文件的UNC路径?这主要是为了识别目的。

+1

你的意思是,一些用户已经映射网络驱动器'X:\在服务器'\\ some-server \ some \ root'上有一些\ file',你想知道原始服务器的UNC路径,例如:'\\ some-server \\ some \ root \ some \ file'? – 2012-02-10 19:26:57

+0

Oui monsieur Caron,这正是我的意思。 – Paradoxyde 2012-02-10 19:29:50

+1

请看这里 - http://stackoverflow.com/questions/2067075/how-do-i-determine-a-mapped-drives-actual-path – JSacksteder 2012-02-10 20:22:14

回答

6

这里是我使用的正常路径转换为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;; 
} 
相关问题