2012-07-26 23 views
1

我試圖做一個回調函數,然後使用libcurl將檢索到的內容寫入文件。該程序在LinuxWindows中運行良好,但fopen操作在solarix_x86中失敗。 myvector包含要複製的url文件的列表,並且PATH_SEPARATOR是一個格式化字符串路徑的宏,具體取決於平臺(Unix,Windows)。fopen生成NULL文件指針Solaris

vector<string>::iterator it; 

    for(it=myvector.begin() ; it < myvector.end(); it++){ 
     string dest = "/home/files/" + PATH_SEPARATOR + *it // PATH_SEPARATOR IS A MACRO 
     curl_easy_setopt(curl, CURLOPT_URL, it->c_str()); 
     curl_easy_setopt(curl, CURL_WRITEFUNCTION, write_data); 

     file = fopen(dest.c_str(), "w+b"); 
     if(file == NULL){ 
      throw std::runtime_error("FILE IS NULL, CAN'T OPEN\n"); 
     } 

     curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); 
     curl_easy_perform(curl); 
     fclose(file); 
    } 

和功能write_data

static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream){ 
    size_t written = fwrite(ptr, size, nmemb, (FILE*)stream); 
    return written; 
} 

我懷疑是與"w+b"標誌的東西....任何想法?

** * ** * ** * *** UPDATE ** * ** * ** * *

errno=2

+0

''w + b''應該是''w + b「'。單引號=字符常量。雙引號=字符串常量。 – BoBTFish 2012-07-26 12:40:21

+0

@BoBTFish 我已將它更改爲「w + b」,並且我遇到了同樣的問題 – cybertextron 2012-07-26 12:43:19

+0

您是否擁有該文件夾的寫入權限? – Rolle 2012-07-26 12:52:49

回答

1

不要混淆字符和字符數組:你想要"w+b"。注意引號。

一個好的(或「正常操作」)編譯器應該是你使用的是「多字節字符常量」(即你的'w+b'),這是C++的一個不起眼的功能,它幾乎從來沒有有意義已經警告過你的事實。

+0

我已將它更改爲「w + b」,並且出現同樣的問題 – cybertextron 2012-07-26 12:43:07

+0

@philippe:嘗試'「wb +」'。 – 2012-07-26 13:28:01

+0

相同的輸出......它沒有變化。 – cybertextron 2012-07-26 13:31:31