2012-02-10 10 views
6

Sto lavorando a un'applicazione in VC++ in cui le unità di rete vengono utilizzate per accedere ai file. Le unità vengono assegnate manualmente dagli utenti e quindi selezionare l'unità nell'applicazione. Ciò comporta che le unità non vengano sempre mappate agli stessi server.Come posso ottenere un percorso UNC per un file a cui si accede tramite un'unità di rete?

Come posso ottenere il percorso UNC per un file di questo tipo? Questo è principalmente per scopi di identificazione.

+1

vuoi dire che qualche utente ha mappato un'unità di rete 'X: \ alcuni \ file' su un server '\\ some-server \ some \ root' e si vuole calcolare il percorso UNC al server originale come:' \\ qualche-server \\ alcuni \ root \ alcuni \ file'? –

+0

Oui monsieur Caron, è esattamente quello che intendo. – Paradoxyde

+1

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

risposta

6

ecco la funzione che uso per convertire un percorso normale per un percorso 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;; 
} 
Problemi correlati