2013-07-09 64 views
-1

我正在開發一個用C++編寫的windows應用程序,它需要通過用戶名& passwd來檢索遠程windows服務器共享的文件列表:如何在windows平臺上獲取遠程windows服務器的共享文件夾的文件列表

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

我不知道如何實現它。如果有人知道一些API或示例代碼或教程,它將非常有用。

+0

你可以看看在Win32 API的網絡共享管理http://msdn.microsoft.com/en-us/library/windows/desktop/bb525393(v=vs.85).aspx – alexbuisson

回答

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); 
0

首先,您需要連接到遠程資源作爲所需用戶。你可以使用WNetAddConnection2函數來做到這一點。

要調用此函數,您需要填寫一個NETRESOURCE結構,該結構描述您希望連接的遠程資源,然後將指向該函數的指針以及用戶名和密碼字符串傳遞給該函數,還有一些標誌。出於您的目的,您可能需要確保並指定標誌CONNECT_TEMPORARYCONNECT_UPDATE_RECENT

然後,一旦您與所需的用戶帳戶建立了連接,您將需要枚舉該共享中的文件/文件夾。您可以像使用任何其他本地文件夾一樣使用網絡共享執行此操作。例如,功能對FindFirstFileFindNextFile。這些功能在線提供了大量示例代碼。這是你將如何填補你的CList集合。

最後,請不要忘記WNetCancelConnection2函數,一旦完成,您將使用該函數斷開與網絡共享的連接。

相關問題