Как устранить ошибку ERROR_BAD_NET_NAME при вызове WNetAddConnection2? - PullRequest
1 голос
/ 14 марта 2012

Я все еще пытаюсь решить проблему, с которой я столкнулся, первая часть заключалась в том, что мне, очевидно, нужно вызвать WNetAddConnection2, чтобы использовать CreateFile для открытия файла через сетевой ресурс.

После этого я получаю сообщение ERROR_BAD_NET_NAME из вызова WNet ... 2.

Удаленный ресурс - это сопоставленная сетевая папка в сети 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 Ответ

1 голос
/ 14 марта 2012

Вы правы, почему это не работает. Вы передаете локальное имя файла (например, Z:\Documents\somefile.txt), когда вам нужно передать имя общего ресурса (например, \\myserver\sharename).

Если общий ресурс уже подключен к Z:, вам не нужно звонить WNetAddConnection2.

Если общий ресурс еще не подключен к Z:, вы не сможете автоматически преобразовать Z:\Documents\somefile.txt в удаленное имя, потому что Windows не знает, что представляет Z:.

Если общий ресурс может быть не подключен, ваша программа должна заранее знать, к какому ресурсу Z: предполагается подключиться, и установить само соединение. Вы можете либо подключить общий ресурс к Z: и использовать существующий путь, либо подключить его без буквы диска и настроить путь самостоятельно; вам просто нужно заменить Z:\ на \\myserver\sharename\.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...