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アプリケーションではありません」というエラーが発生します。オプションなどを設定するのを忘れましたか?