fopen生成NULL文件指针Solaris

时间:2012-07-26 12:35:51

标签: c++ solaris libcurl

我正在尝试创建一个回调函数,然后使用libcurl将检索到的内容写入文件。该程序在LinuxWindows中运行良好,但fopen操作在solarix_x86中失败。 myvector包含要复制的url文件列表,PATH_SEPARATOR是一个格式化字符串路径的宏,具体取决于平台(UnixWindows)。

  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

1 个答案:

答案 0 :(得分:1)

不要混淆字符和字符数组:您需要"w+b"。记住引号。

一个好的(或“正确操作的”)编译器应该警告你关于你正在使用“多字节字符常量”(即你的'w+b')的事实,这是C ++的一个模糊特征,几乎从不有道理。