1

コールバック関数を作成してから、取得したコンテンツをを使用してファイルに書き込もうとしていますlibcurl。プログラムはで正常に動作LinuxしますがWindowsfopen操作はで失敗し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

4

1 に答える 1

1

文字と文字配列を混同しないでください"w+b"。引用符に注意してください。

優れた(または「適切に動作する」)コンパイラは、「マルチバイト文字定数」(つまり、'w+b')を使用しているという事実について警告する必要があります。これは、C ++のあいまいな機能であり、ほとんど意味がありません。

于 2012-07-26T12:39:20.360 に答える