Поддержка C ++ 64-bit std :: ostream - PullRequest
1 голос
/ 17 ноября 2009

Я собираюсь перейти от использования стандартных указателей FILE из более старого кода к использованию потоков C ++, но мне нужно, чтобы LARGEFILE обращался за поддержкой (флаги компилятора, которые активируют эту поддержку: -D_FILE_OFFSET_BITS = 64 et al), который я могу получить, используя тип данных off64_t .

На мой оригинальный вопрос был дан ответ относительно этой темы и C API, и теперь я надеюсь, что смогу перейти к использованию потоков C ++.

Включают ли одни и те же флаги возможность поиска файловых потоков в C ++?

1 Ответ

4 голосов
/ 17 ноября 2009

Итак, я выполнил быстрый тест для файла размером 16 ГБ, и, похоже, он сработал. Вот код, который я использовал.

// 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 &lt&lt stream.tellg() &lt&lt " " &lt&lt line &lt&lt "\n";      
}
...