-1

我正在开发一个用 C++ 编写的 Windows 应用程序,它需要通过用户名和密码检索远程 Windows 服务器共享折叠的文件列表,例如:

BOOL GetFilesFromServerShareFolder(const CString& serversharefolderpath,
                                   const CString& username,
                                   const CString& passwd,
                                   CList<CString>& retfiles); 

我不知道如何实现它。如果有人知道一些 API 或示例代码或教程,那将非常有用。

4

2 回答 2

0

首先,您需要以所需用户的身份连接到远程资源。您可以使用该WNetAddConnection2功能来做到这一点。

要调用此函数,您将填写一个NETRESOURCE描述您希望连接的远程资源的结构,然后将指向该结构的指针连同用户名和密码字符串以及一些标志一起传递给该函数。出于您的目的,您可能需要确保并指定标志CONNECT_TEMPORARYCONNECT_UPDATE_RECENT.

然后,一旦您与所需的用户帐户建立连接,您将需要枚举该共享中的文件/文件夹。您可以像使用任何其他本地文件夹一样使用网络共享执行此操作。例如,这对函数FindFirstFileFindNextFile。这些功能在线提供了大量示例代码。这就是您将如何填写您的CList收藏。

最后,不要忘记该WNetCancelConnection2功能,完成后您将使用该功能断开与网络共享的连接。

于 2013-07-09T09:59:47.440 回答
0

您可以使用该WNetAddConnection2功能连接到共享文件夹。

NETRESOURCE nr = {0};
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = serversharefolderpath;
DWORD ret = WNetAddConnection2(&nr, passwd, username, CONNECT_TEMPORARY);

然后,您应该能够使用通常的 FindFirstFile API 枚举该共享中的文件。

WIN32_FIND_DATA fd;
CString searchpath = serversharefolderpath + "\\*.*";
HANDLE findHandle = FindFirstFile(searchpath, &fd);
if (findHandle != INVALID_HANDLE_VALUE) {
  // the rest of the enumeration here
  FindClose(findHandle);
}

最后在完成后取消连接。

WNetCancelConnection2(nr.lpRemoteName, 0, TRUE);
于 2013-07-09T10:02:42.483 回答