Поврежденные бинарные файлы после переноса libcurl - PullRequest
0 голосов
/ 05 августа 2010

Я передаю двоичный файл (.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». Я забыл установить опцию или что-то?

Ответы [ 2 ]

5 голосов
/ 05 августа 2010

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

 FILE* f = fopen("C:\\blah.exe", "wb");
0 голосов
/ 05 августа 2010

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

...