ソケット通信が急に正常動作しなくなったので代替案。原因不明、今まで動いてたのに。
「緊急だ!調査なんかしてる場合じゃねぇ」ってことで、普通に叩いて動作したwgetを採用。つまりsystem関数。聞こえる、聞こえるぞ、不平不満の声が。そらそうだ、私も嫌だ。でも思っていたよりもすんなり動いているのでこれで様子見。
bool FileDownload( std::string sourceUrl, std::string sourceFile, std::string putPath ) { std::string getUrl = sourceUrl + sourceFile; std::string command = "wget " + getUrl+ " -P " + putPath; system( ( const char* )command.c_str() ); std::string dlFile = putPath + sourceFile; std::ifstream ifs( dlFile.c_str() ); if ( ifs.fail() ) { return false; } return true; }
system関数では、wgetでダウンロードに失敗したとしても返り値からは判別不能なので、代わりにifstreamでファイルの生存チェックをしています。ファイルの読み込みに失敗したらfalseを返し、そうでなければtrueを返して終了。
本当はあまり使いたくないけど、どうしようもないときはこうするしかないのかしら。