文件显示的范围为 1.1GB-3.1GB。服务器有 64GB RAM(较小的服务器有 24GB)。
所以我想我只需将整个内容读入内存而不是使用块。(块可能会落在 crlf 位置之外,所以我必须稍微回溯。更简单的代码可以吞掉整个内容)。
ReadFile 和 ReadFileEx 似乎停留在 32 位领域,即使在 Win64 中构建也是如此。我觉得我错过了一些明显的东西。
#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);
}
参见上文:bytesRead 是一个双字型。我敢打赌我的输入 long long 只会被读为 long 。