gpt4 book ai didi

c++ - C++中CURL下载的文件打不开

转载 作者:行者123 更新时间:2023-11-30 01:03:19 25 4
gpt4 key购买 nike

我正在使用 C++ 开发一个程序,我必须使用 cURL 下载一个文件,然后进一步打开它,但问题是当我尝试下载后打开文件,它打不开。我正在尝试打开一个 .exe 文件。下面是负责文件下载的部分代码

curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename.c_str(), "w");
curl_easy_setopt(curl, CURLOPT_URL, links[index]);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}

以及应该打开下载文件的行:

ShellExecute(NULL, "open", fileToLaunch.c_str() , NULL, NULL, SW_HIDE);

当我尝试手动启动文件(通过单击它)时,Windows 返回一条错误消息,指出相应的应用程序不是 Win32 应用程序。我正在使用 Visual Studio 2017

这是整个代码块:

#include <stdio.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include <string>
#include <iostream>
using namespace std;

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}

int main(void) {
CURL *curl;
FILE *fp;
CURLcode res;
string url = "Here goes the url for file download";
string outfilename = "C:\\1.exe";
curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename.c_str(), "wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;

ShellExecute(NULL, "open", outfilename.c_str(), NULL, NULL, SW_HIDE);
}

最佳答案

改变

fp = fopen(outfilename.c_str(), "w");

fp = fopen(outfilename.c_str(), "wb");

默认情况下,您将其作为带有换行符翻译的文本写入磁盘。你需要把它写成二进制。

参见 https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-wfopen?view=vs-2017以获得更全面的解释。

关于c++ - C++中CURL下载的文件打不开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com