2012-02-10 45 views
6

Tôi đang làm việc trên một ứng dụng trong VC++ nơi ổ đĩa mạng được sử dụng để truy cập tệp. Các ổ đĩa được gán bằng tay bởi người dùng và sau đó chọn ổ đĩa trong ứng dụng. Điều này dẫn đến các ổ đĩa không phải lúc nào cũng được ánh xạ tới cùng một máy chủ.Làm cách nào để có được đường dẫn UNC cho tệp được truy cập thông qua ổ đĩa mạng?

Tôi làm cách nào để có được đường dẫn UNC tới tệp như vậy? Đây là chủ yếu cho mục đích nhận dạng.

+1

Bạn có nghĩa là một số người dùng đã ánh xạ một ổ đĩa mạng 'X: \ một số \ file' trên một máy chủ '\\ some-server \ some \ root' và bạn muốn tìm ra đường dẫn UNC tới máy chủ gốc như:' \\ some-server \\ some \ root \ some \ file'? –

+0

Oui monsieur Caron, đó là chính xác những gì tôi có ý nghĩa. – Paradoxyde

+1

Xem tại đây - http://stackoverflow.com/questions/2067075/how-do-i-determine-a-mapped-drives-actual-path – JSacksteder

Trả lời

6

đây là chức năng tôi sử dụng để chuyển đổi một con đường bình thường để một đường dẫn 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;; 
} 
Các vấn đề liên quan