我仍然在努力解决我遇到的一个问题,the first part of it是我显然需要调用WNetAddConnection2才能使用CreateFile在网络共享中打开一个文件。
这样做后,我现在收到一个来自WNet.2呼叫的ERROR_BAD_NET_NAME返回。
远程资源是windows网络上的映射网络文件夹(我们所在的客户机是windows )。网络资源应该在启动时就连接起来,但是当然,假设这一点可能是不好的。该文件夹映射到本地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
,而应该使用\Z:\Documents\somefile.txt
\路径\文件夹符号。如果是这样的话,我如何以编程方式获取这些信息,以便将其作为输入提供?我是否误解了原答复者,我可以将文件名转换为\\\\Z\\Documents\\somefile.txt
?如果是这样的话,是否有资源来执行此操作,或者应该自己解析字符串?
发布于 2012-03-14 16:44:45
你说得对,为什么它不起作用。当您应该传递共享名(例如,Z:\Documents\somefile.txt
)时,您正在传递本地文件名(例如\\myserver\sharename
)。
如果共享已经连接到Z:
,那么不需要调用WNetAddConnection2
。
如果共享尚未连接到Z:
,则无法自动将Z:\Documents\somefile.txt
转换为远程名称,因为Windows不知道Z:
代表什么。
如果共享可能没有连接,那么您的程序需要事先知道共享Z:
应该连接到什么,并建立连接本身。您可以将共享连接到Z:
并使用现有路径,或者不使用驱动器号连接它,并自己调整路径;只需要用\\myserver\sharename\
替换Z:\
。
https://stackoverflow.com/questions/9705535
复制相似问题