传输libcurl后损坏的二进制文件

时间:2010-08-05 05:51:36

标签: c++ ftp binary libcurl transfer

我正在使用libcurl使用FTP传输二进制文件(.exe),并将其保存到本地文件。问题是文件传输后,它被更改,不再是有效的Win32应用程序,并且不会运行。以下是我的表现:

CURL *curl;

curl = curl_easy_init();
    FILE* f = fopen("C:\\blah.exe", "w");

if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.mysite.com");
    curl_easy_setopt(curl, CURLOPT_USERPWD, "blah:blah");
    curl_easy_setopt(curl, CURLOPT_FTP_FILEMETHOD, CURLFTPMETHOD_SINGLECWD);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &f);
} else {
            fclose(f);
    return CURL_EASY_INIT_FAIL;
}

    fclose(f);

文件已写入,但比FTP服务器上的文件大。就像我说的,尝试运行它会导致“%1不是有效的Win32应用程序”错误。我忘了设置一个选项吗?

2 个答案:

答案 0 :(得分:5)

你忘记了二进制标志。 这是正确的代码:

 FILE* f = fopen("C:\\blah.exe", "wb");

答案 1 :(得分:0)

原因是您转换为ASCII而不是二进制。所以你的行尾可能会被打破。在二进制文件中有CR可能会变成CR LF或反过来。调整CURL以进行二进制传输。