1

ファイルサイズの測定方法に関するいくつかのトピック(C ++ファイルストリーム(fstream)の使用、ファイルのサイズをどのように判断できますか?およびC ++:誤ったファイルサイズの取得)を参照して、ファイルの最初と最後の差を計算します。 :

std::streampos fileSize( const char* filePath ){

    std::streampos fsize = 0;
    std::ifstream file( filePath, std::ios::binary );

    fsize = file.tellg();
    file.seekg( 0, std::ios::end );
    fsize = file.tellg() - fsize;
    file.close();

    return fsize;
}

ただし、最初にファイルを開く代わりに、最後にファイルを開いて、次のように対策を講じることができます。

std::streampos fileSize( const char* filePath ){

    std::ifstream file( filePath, std::ios::ate | std::ios::binary );
    std::streampos fsize = file.tellg();
    file.close();

    return fsize;
}

それは機能しますか?そうでなければ、なぜですか?

4

1 に答える 1

2

それはうまくいくはずです。C++標準は約std::ios::ate

ate-開いて、開いた直後に終了しようとします

手動で開いてからシークすることが成功したときに失敗する理由はありません。そしてtellg、どちらの場合も同じです。

于 2012-10-09T02:04:35.327 に答える