我仍在尝试解决我遇到的问题,the first part of it我显然需要调用WNetAddConnection2才能使用CreateFile在网络共享中打开文件。
完成后,我现在收到来自WNet ... 2电话的ERROR_BAD_NET_NAME回复。
远程资源是Windows网络上的映射网络文件夹(客户端,我们在哪里,是windows xp)。网络资源应该在启动时连接,但当然可能不好意思。该文件夹映射到本地Z:
。我可以使用资源管理器从机器上的目标文件夹访问,读取,写入和删除文件。
HANDLE initFile ( LPCTSTR iNCfileName ) {
DWORD dw;
HANDLE fHandle=NULL;
NETRESOURCE nr = {0}; //new structure for network resource
nr.dwType = RESOURCETYPE_ANY; //generic resource (any type allowed)
nr.lpLocalName = NULL; //does not use a device
// typical iNCfileName is std::string a="Z:\\Documents\\somefile.txt".c_str()
nr.lpRemoteName = (char*)iNCfileName;
//"\\\\DOMAIN\\PATH\\FOLDER";
nr.lpProvider = NULL; //no provider
// CONNECT_CURRENT_MEDIA ??
DWORD ret = WNetAddConnection2 (&nr, NULL, NULL, CONNECT_TEMPORARY);
//...
return fHandle;
}
我认为问题是我无法使用Z:\Documents\somefile.txt
,而应使用\\ DOMAIN \ PATH \ FOLDER表示法。如果是这种情况,我如何以编程方式获取该信息,以便我可以将其作为输入提供?我是否误解了我可以将文件名转换为\\\\Z\\Documents\\somefile.txt
的原始回答者?如果是这样有资源来执行此操作,还是我应该自己解析字符串?
答案 0 :(得分:1)
你说它为什么不起作用是正确的。您应该传递共享名称(例如Z:\Documents\somefile.txt
)时传递本地文件名(例如\\myserver\sharename
)。
如果共享已与Z:
相关联,则您无需致电WNetAddConnection2
。
如果共享尚未与Z:
相关联,那么您无法自动将Z:\Documents\somefile.txt
转换为远程名称,因为Windows不知道Z:
代表什么。
如果共享可能未连接,那么您的程序需要事先知道共享Z:
应该连接到哪个并自行建立连接。您可以将共享连接到Z:
并使用现有路径,也可以将其连接到没有驱动器号并自行调整路径;您只需将Z:\
替换为\\myserver\sharename\
。