Поврежденные двоичные файлы после передачи libcurl

Я передаю двоичный файл (.exe) по FTP с помощью libcurl и сохраняю его в локальный файл. Проблема в том, что после передачи файл изменяется и больше не является действительным приложением 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». Я забыл установить опцию или что-то в этом роде?


person Nilbert    schedule 05.08.2010    source источник


Ответы (2)


Вы забыли бинарный флаг. Это правильный код:

 FILE* f = fopen("C:\\blah.exe", "wb");
person Dominique McDonnell    schedule 05.08.2010
comment
ВАУ СПАСИБО. Это ответ. - person Nilbert; 05.08.2010

Причина в том, что вы передаете как ASCII, а не как двоичный файл. Таким образом, ваш конец строк может быть нарушен. Если в бинарном файле есть CR, они могут превратиться в CR LF или наоборот. Настройте CURL, чтобы выполнить двоичную передачу.

person jdehaan    schedule 05.08.2010