1

我正在尝试创建一个回调函数,然后使用libcurl. 该程序在 中运行良好LinuxWindows但是在 中fopen运行失败solarix_x86myvector包含要复制的 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.

4

1 回答 1

1

不要混淆字符和字符数组:你想要"w+b". 注意引号。

一个好的(或“正确操作的”)编译器应该警告您正在使用“多字节字符常量”(即您的'w+b')这一事实,这是 C++ 的一个晦涩难懂的特性,几乎没有意义。

于 2012-07-26T12:39:20.360 回答