2011-06-20 56 views
10

我需要將目錄上傳到我的應用程序上的FTP服務器,並計劃使用 使用libcurl。我發現沒有直接的方式來上傳一個包含多個 文件的目錄,這對我來說很有意義。然而,我不能在 上傳許多文件。libcurl - 保持連接「打開」上傳多個文件(FTP)

如果我得到目錄中的文件列表,我可以在一個循環中上傳它們。 選項CURLOPT_FTP_CREATE_MISSING_DIRS可能會幫助子目錄, 但如果我想知道是否我錯過了這一點或這將有 任何嚴重的缺點。

主要問題是:如何保持連接「打開」?重新連接 每個文件可能意味着額外的不必要的開銷。

理想情況下,我想繼續使用簡單的界面。但如果另一個接口 在這種情況下提供更好的支持,我會使用它。

CURLcode ret; 
CURL *handle = curl_easy_init(); 

/* Connect to FTP server using  * 
* the given username and password */ 

for ({each file}) { 

    curl_easy_setopt(handle, ..., ...); 
    ... 
    ret = curl_easy_perform(handle); 
    /* Analyse return code */ 
    curl_easy_reset(handle); 
} 

/* Disconnect from server */ 
curl_easy_clenup(handle); 

回答

12

只是重複使用相同的句柄,它會保持連接儘可能打開,隨後的傳輸將重新使用前一個。

當您使用easy界面時,連接緩存保存在簡單的句柄中。如果您改爲使用多接口,則連接緩存將保留在多個句柄中,並將在同一個多句柄內使用的所有簡單句柄之間共享。

+0

非常感謝Stenberg先生,很榮幸能收到您的回覆!如果我可能要求進一步澄清,在這種情況下是否需要'curl_easy_reset()'?手冊頁說活動連接保存在句柄中,但是手動重新設置選項(在循環中)就足夠了嗎? – sidyll

+0

您可以按照您認爲最適合您的代碼的方式進行操作。重置不會終止連接緩存。如果您願意,可以手動重新設置選項。 –

+0

再次感謝,並祝賀這項出色的工作。最好的祝願 – sidyll