Получение местоположения файла: сетевой или локальный - PullRequest
0 голосов
/ 18 февраля 2010

Какой самый простой способ в Windows получить местоположение файла?

У меня есть имя файла, которое было возвращено мне функцией Windows GetModuleName (возвращает полное имя модуля (exe или dll)), и которое может быть в любом допустимом формате имени файла, например

  • myfile.dll
  • C: \ Windows \ myfile.dll
  • \? \ C: \ windows \ myfile.dll (или что-то в этом роде)
  • х: \ Bin \ myfile.dll
  • \ MyServer \ MyShare \ myfile.dll

Какой самый простой способ узнать, относится ли путь к локальному диску или сетевому диску?

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

GetFullPathName() поможет нормализовать имя пути. Я не думаю, что вам это нужно, хотя. Вы хотели бы пройти через ручку. Так что позвоните CreateFile(), получите ручку, а затем позвоните, например, GetFinalPathNameByHandle(VOLUME_NAME_GUID) Это работает, потому что сетевые диски не имеют идентификаторов GUID тома.

0 голосов
/ 18 февраля 2010

Этот код может помочь вам, он определяет, находится ли папка в общем сетевом ресурсе или нет.

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...