2012-02-10 14 views
6

Pracuję nad aplikacją w VC++, w której do uzyskiwania dostępu do plików wykorzystywane są dyski sieciowe. Dyski są przypisywane ręcznie przez użytkowników, a następnie wybierają dysk w aplikacji. Powoduje to, że napędy nie zawsze są mapowane na te same serwery.Jak mogę uzyskać ścieżkę UNC dla pliku, do którego można uzyskać dostęp przez dysk sieciowy?

Jak podchodzę do uzyskania ścieżki UNC do takiego pliku? Jest to głównie do celów identyfikacji.

+1

Czy to znaczy, że jakiś użytkownik zmapowany dysk sieciowy 'X: \ niektóre \ file' na serwerze '\\ some-server \ some \ root' i chcesz znaleźć ścieżkę UNC do oryginalnego serwera:' \\ some-server \\ some \ root \ some \ file'? –

+0

Oui monsieur Caron, dokładnie o to mi chodzi. – Paradoxyde

+1

Zobacz tutaj - http://stackoverflow.com/questions/2067075/how-do-i-determine-a-mapped-drives-actual-path – JSacksteder

Odpowiedz

6

oto funkcja używam do konwersji normalną ścieżkę do ścieżki 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;; 
} 
Powiązane problemy