【问题标题】:Getting location of a file: network or local获取文件的位置:网络或本地
【发布时间】:2010-02-18 09:28:31
【问题描述】:

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

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

  • myfile.dll
  • c:\windows\myfile.dll
  • \?\c:\windows\myfile.dll(或类似的东西)
  • x:\bin\myfile.dll
  • \myserver\myshare\myfile.dll

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

【问题讨论】:

    标签: c++ windows filenames


    【解决方案1】:

    GetFullPathName() 将有助于规范化路径名。我不认为你需要它。你会想穿过把手。所以打电话给CreateFile(),得到一个句柄,然后打电话给例如GetFinalPathNameByHandle(VOLUME_NAME_GUID) 这是因为网络驱动器没有卷 GUID。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多