微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Windows 上,使用 C++,如何将文件下载到特定文件夹?

如何解决在 Windows 上,使用 C++,如何将文件下载到特定文件夹?

我想使用 URLDownloadToFile 函数下载文件,我成功下载了 a 文件,并使用了一个预先起草的名称,例如 test.jpg。但是我无法将两个或更多文件下载到特定文件夹(因为这次您不能用名称命名两张或更多图片)。所以,有人可以帮忙吗? 对了,接下来是我的Test.cpp代码

// Test.cpp : Defines the entry point for the application.
//
#include <Windows.h>
#include <thread>
#include <string>
#include <vector>
#include <Urlmon.h> //for URLDownloadToFile
#pragma comment(lib,"urlmon.lib")
#include <iostream>

void win_downLoad(std::vector<std::string>& urlVector )
{
    std::string downloadURL = "";
    int length = urlVector.size();
    for (int i = 0; i < length; i++)
    {
        downloadURL = urlVector[i];
        std::string savepath = "C:\\tmp\\" ;
        URLDownloadToFile(NULL,downloadURL.c_str(),savepath.c_str(),NULL);
    }
}

int main()
{
    std::vector<std::string> urlVector {"https://unsplash.com/photos/aoiUPcoLbBk/download?force=true","https://unsplash.com/photos/0qGnW6iakaE/download?force=true","https://unsplash.com/photos/fWDe78O7-Ks/download?force=true","https://unsplash.com/photos/4c5Fovle5Dc/download?force=true"};
    
    const int num_threads = 4;
    std::thread threads[num_threads];
    for (size_t i = 0; i < num_threads; i++)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(500));
        threads[i] = std::thread(win_downLoad,urlVector);
    }

    for (size_t i = 0; i < num_threads; i++)
    {
        if (threads[i].joinable())
        {
            threads[i].join();
        }
    }

    std::cout << num_threads << " threads have been worked successfully.\n";
    return 0;
}

所以,我的问题的本质是,如何使用 C++ 代码进行多线程 在Win10操作系统上下载多个文件到指定目录?

解决方法

不是将整个 urlVector 传递给 win_download 函数,而是传递其中的一部分,而是在线程之间划分这些部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。