2010-08-05 78 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進行二進制傳輸。