読者です 読者をやめる 読者になる 読者になる

C++でsystem関数を用いてWebからファイルをwgetする

C/C++

ソケット通信が急に正常動作しなくなったので代替案。原因不明、今まで動いてたのに。

「緊急だ!調査なんかしてる場合じゃねぇ」ってことで、普通に叩いて動作した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を返して終了。

本当はあまり使いたくないけど、どうしようもないときはこうするしかないのかしら。