【问题标题】: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;
}