如何在调用WNetAddConnection2时解决ERROR_BAD_NET_NAME错误?

时间:2012-03-14 16:03:06

标签: c++ winapi networking file-io

我仍在尝试解决我遇到的问题,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的原始回答者?如果是这样有资源来执行此操作,还是我应该自己解析字符串?

1 个答案:

答案 0 :(得分:1)

你说它为什么不起作用是正确的。您应该传递共享名称(例如Z:\Documents\somefile.txt)时传递本地文件名(例如\\myserver\sharename)。

如果共享已与Z:相关联,则您无需致电WNetAddConnection2

如果共享尚未与Z:相关联,那么您无法自动将Z:\Documents\somefile.txt转换为远程名称,因为Windows不知道Z:代表什么。

如果共享可能未连接,那么您的程序需要事先知道共享Z:应该连接到哪个并自行建立连接。您可以将共享连接到Z:并使用现有路径,也可以将其连接到没有驱动器号并自行调整路径;您只需将Z:\替换为\\myserver\sharename\