2010-02-18 7 views
0

Quelle est la méthode la plus simple dans Windows pour obtenir l'emplacement d'un fichier?Obtention de l'emplacement d'un fichier: réseau ou local

J'ai un nom de fichier qui m'a été retourné par la fonction Windows GetModuleName (retourne le nom complet d'un module (exe ou dll)), et qui pourrait être dans n'importe quel format de nom de fichier valide, par ex.

  • MonFichier.dll
  • c: \ windows \ MonFichier.dll
  • \ \ c: \ windows \ MonFichier.dll (ou quelque chose comme ça)
  • x: \ bin \ monfichier. dll
  • \ myserver \ myshare \ MonFichier.dll

Quelle est la meilleure façon de savoir si le chemin fait référence à un lecteur local ou sur un lecteur réseau?

Répondre

1

GetFullPathName() aidera à normaliser le nom du chemin. Je ne pense pas que vous en ayez besoin. Vous voudriez passer par la poignée. Appelez donc CreateFile(), récupérez une poignée, puis appelez par ex. GetFinalPathNameByHandle(VOLUME_NAME_GUID) Cela fonctionne car les lecteurs réseau n'ont pas de GUID de volume.

0

Ce code peut vous aider, il détermine si un dossier est sur un partage réseau ou non.

#include <windows.h> 
#include <stdio.h> 
#include <lm.h> 

int main() 
{ 
    PSHARE_INFO_502 BufPtr, p; 
    NET_API_STATUS res; 
    LPTSTR lpszServer = NULL; 
    DWORD er = 0,tr = 0,resume = 0, i; 

    do 
    { 
     res = NetShareEnum(lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume); 

     if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA) 
     { 
     p = BufPtr; 

     for(i = 1; i <= er; i++) 
     { 
      printf("%S\t\t%S\n", p->shi502_netname, p->shi502_path); 
      p++; 
     } 

     NetApiBufferFree(BufPtr); 
     } 
     else 
     printf("Error: %ld\n", res); 
    } 
    while(res == ERROR_MORE_DATA); 

    system("pause"); 
    return 0; 
}