Os arquivos aparecem na faixa de 1,1 GB a 3,1 GB. O servidor possui 64 GB de RAM (os servidores menores possuem 24).
Então, acho que vou ler tudo na memória, em vez de usar pedaços. (Pedaços podem cair fora da posição crlf, então eu teria que voltar um pouco. Código muito mais simples para engolir tudo).
ReadFile e ReadFileEx parecem presos em terras de 32 bits, mesmo quando construídos em Win64. Sinto que estou perdendo algo óbvio.
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
cout << "start\r\n";
HANDLE hInput;
hInput = CreateFile(L"My-giant-File.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
long long amountOfDataToRead = 4000000000; //Arbitrary 4Gb read buffer
byte * buffer = reinterpret_cast<byte*>(malloc(amountOfDataToRead));
DWORD bytesRead = 0;
ReadFile(hInput, buffer, amountOfDataToRead, &bytesRead, NULL);
//Perform operation on data
free(buffer);
CloseHandle(hInput);
}
Veja acima: bytesRead é um DWord. E aposto que minha contribuição há muito tempo está sendo lida longamente.