0

我正在使用 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 应用程序”错误。我是否忘记设置选项或其他内容?

4

2 回答 2

5

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

 FILE* f = fopen("C:\\blah.exe", "wb");
于 2010-08-05T05:54:54.187 回答
0

原因是您以 ASCII 格式而不是二进制格式传输。所以你的行尾可能会被打破。在二进制文件中有 CR,它们可能会变成 CR LF 或相反。调整 CURL 以进行二进制传输。

于 2010-08-05T05:55:01.080 回答