Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Как в C++ открыть на чтение текстовый файл размером 5 и больше ГБ?

#файлы #cpp


Насколько я понимаю, когда файл открывается на чтение, его содержимое записывается
в оперативную память. Есть ли у c++ какие-нибудь встроенные механизмы для работы с
большими файлами? Может как-то можно их открывать частично или скажем хранить буфер
не в оперативной памяти а в постоянной?
UPD:
Сделал вот так:
#include "stdafx.h"
#include 
#include 
#include 

using namespace std;

int main(array ^args){
    char * buffer;      
    int len = 16384;    
    long t1 = clock();

    cout << "Opening file..." << endl;

    ifstream infile("filename1", ios::in | ios::binary); 
    ofstream outfile("filename2", ios::out | ios::binary);

    if(!infile || !outfile){ 
        cout << "Can not open file!" << endl;
        system("PAUSE");
        return 1;
    }

    cout << "Done!" << endl;
    cout << "Please wait! Copying file..." << endl;

    buffer = new char[len]; 
    while (!infile.eof()){
        infile.read(buffer, len);
        if(infile.gcount()) {
            outfile.write(buffer, infile.gcount());
        }
    }

    infile.close();
    outfile.close();

    delete[] buffer;

    long t2 = clock();

    cout << "Done!" << endl; 
    cout << "Time: " << (t2 - t1)/1000/60 << " minut."<< endl;

    system("PAUSE");
    return 0;
}
    


Ответы

Ответ 1



Нет, при открытии файла ты получаешь его хэндл, но в память он загружается, когда ты его считываешь. Например (fread).

Комментариев нет:

Отправить комментарий