使用CURL斷點續傳時遇到的資料型別問題
阿新 • • 發佈:2019-02-19
使用vc2008+CURL開發 HTTP 檔案下載時,發現只要設定了斷點續傳,就無法執行下載,向CURL註冊的下載回撥函式根本就不會被呼叫。
程式碼如下:
curl_easy_setopt(curl, CURLOPT_URL, szRemoteUrl);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, DoDownloadFunc);
curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, (nLocalFileLen>0)?nLocalFileLen:0);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
折騰了好久,網路上都找不到類似的抱怨,一些網路上的示例程式碼寫法和我一樣。
因此,甚至懷疑是否自己編譯的CURL庫不正確,但是替換CURL庫問題依舊。
最終發現其實錯在CURLOPT_RESUME_FROM_LARGE的引數設定上。
CURLOPT_RESUME_FROM_LARGE支援的引數型別是 long long型別。所以,以上程式碼的續傳設定修改如下,就OK了。
curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, (LONGLONG)((nLocalFileLen>0)?nLocalFileLen:0));
大家如果遇到類似問題,也許可以確認下引數型別。