Xử lý tải file với C++

Em đang tìm hiểu, vọc code 1 chương trình hiển thị phần trăm file tải về từ link với c/c++(kiểu như curl trên linux).
Bài toán có 2 phần:

    1) lấy tổng số bytes của file cần tải(lấy trước khi tải).
    2) biết đã tải được bao nhiêu bytes.

từ đó mà biết được file đã tải được bao nhiêu phần trăm.
Em thì đã xử lý được phần thứ 2 với lib cURL.
Nhưng gặp lỗi với phần 1).

Các bác có giải pháp gì cho nó không ạ?
Em đã thử option: “CURLOPT_XFERINFOFUNCTION” ở lib cURL nhưng chỉ hiệu quả với plain text, hoặc html, còn với một số file như đuôi .deb thì chạy lỗi ngữ nghĩa.

xài cái này là wrapper cho curl nè: https://github.com/libcpr/cpr original author là người Việt nha :triumph:

docs: https://docs.libcpr.org/advanced-usage.html#progresscallback

int main(int argc, char** argv) {
    cpr::Response r = cpr::Get(cpr::Url{"http://www.httpbin.org/get"},
                      cpr::ProgressCallback([&](cpr_off_t downloadTotal, cpr_off_t downloadNow, cpr_off_t uploadTotal, cpr_off_t uploadNow, intptr_t userdata) -> bool
    {
        std::cout << "Downloaded " << downloadNow << " / " << downloadTotal << " bytes." << std::endl;
        return true;
    }));
    return 0;
}

nếu không xài thì vào github của cpr rồi mò xem đoạn ProgressCallback này được viết thế nào :V :V

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?