1

いくつかの古いコードからの標準のFILEポインターの使用からC++ストリームの使用に移行しようとしていますが、LARGEFILEシークサポート(このサポートをアクティブにするコンパイラフラグは次のとおりです:-D_FILE_OFFSET_BITS = 64など)が必要です。off64_tデータ型を使用して取得します。

の最初の質問は、この主題とC APIに関して回答されましたが、今ではC++ストリームの使用に移行できることを望んでいます。

同じフラグがC++のファイルストリームでシーク機能をトリガーしますか?

4

1 に答える 1

4

そこで、16GBのファイルで簡単なテストを実行しましたが、うまくいったようです。これが私が使用したコードです。

// compiled with : g++ -o largefile -D_FILE_OFFSET_BITS=64 largefile.cpp
#include "iostream"
#include "fstream"

int
main (int argc, char * argv[]) {
        char line[4096];
        std::ifstream stream ("/home/jbellone/largefile.csv");

        // Seek forward to somewhere past 4GB
        stream.seekg (10294967296, std::ios_base::beg);

        stream.getline (line, 100);

        std::cout << stream.tellg() << " " << line << "\n";      
}
于 2009-11-17T15:22:28.803 に答える