获取文件的位置:网络或本地

时间:2010-02-18 09:28:32

标签: c++ windows filenames

Windows中获取文件位置的最简单方法是什么?

我有一个由Windows函数GetModuleName返回给我的文件名(返回模块的全名(exe或dll)),它可以是任何有效的文件名格式,例如。

  • myfile.dll
  • C:\ WINDOWS \ myfile.dll
  • \?\ c:\ windows \ myfile.dll(或类似内容)
  • X:\ BIN \ myfile.dll
  • \ MYSERVER \ myshare的\ myfile.dll

了解路径是指本地驱动器还是网络驱动器的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

GetFullPathName()将有助于规范化路径名称。我觉得你不需要它。你想要通过手柄。所以请致电CreateFile(),获取句柄,然后拨打电话,例如GetFinalPathNameByHandle(VOLUME_NAME_GUID)这可行,因为网络驱动器没有卷GUID。

答案 1 :(得分:0)

此代码可能对您有所帮助,它可以确定文件夹是否在网络共享上。

#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;
}