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がある場合、それらはCRLFまたはその逆に変わる可能性があります。CURLを調整してバイナリ転送を行います。

于 2010-08-05T05:55:01.080 に答える