我正在尝试创建一个回调函数,然后使用libcurl
将检索到的内容写入文件。该程序在Linux
和Windows
中运行良好,但fopen
操作在solarix_x86
中失败。 myvector
包含要复制的url文件列表,PATH_SEPARATOR
是一个格式化字符串路径的宏,具体取决于平台(Unix
,Windows
)。
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"
旗帜相关的东西......有什么想法吗?
的 的 ** * ** * ** * 的*** 更新 ** * ** * ** * *
errno=2
。
答案 0 :(得分:1)
不要混淆字符和字符数组:您需要"w+b"
。记住引号。
一个好的(或“正确操作的”)编译器应该警告你关于你正在使用“多字节字符常量”(即你的'w+b'
)的事实,这是C ++的一个模糊特征,几乎从不有道理。