2010-08-05 76 views
0

我正在使用libcurl传输带有FTP的二进制文件(.exe),并将其保存到本地文件中。问题是,文件传输后,它被更改,不再是有效的Win32应用程序,并且不会运行。以下是我的工作方式:传输后损坏的二进制文件libcurl

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应用程序”错误。我忘了设置一个选项或什么?

回答

5

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

FILE* f = fopen("C:\\blah.exe", "wb"); 
+0

哇,谢谢。这是答案。 – Nilbert 2010-08-05 05:57:49

0

的原因是,你作为传输ASCII,而不是二进制。所以你的行结束可能会被打破。在二进制中有CR,它们可能变成CR LF或其他方式。调整CURL进行二进制传输。