Я хочу прочитать файл с жесткого диска размером до ~ 4-5 ГБ.Но не целое сразу, а по частям ~ 100 МБ в последовательности.Я хочу сделать это максимально простым и быстрым, но теперь я вижу, что стандартные методы из C ++ не будут работать для файлов размером более 2 ГБ.Я использую Visual Studio 2008, C ++ / CLI.Какие-либо предложения?Я пытаюсь использовать CreateFile, ReadFile, но для меня это создает больше проблем, чем на самом деле, или я использую их неправильно для чтения большого файла по частям.
EDIT : Пример кода:
Создание дескриптора
hFile = CreateFile(result,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL
|FILE_FLAG_NO_BUFFERING
| FILE_FLAG_OVERLAPPED,
0);
Чтение
lpOverlapped = new OVERLAPPED;
lpOverlapped->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
lpOverlapped->Offset=10;
lpOverlapped->OffsetHigh=0;
DWORD howMuchWasRead;
BOOLEAN error = false;
do {
this->lastError = NO_ERROR;
BOOL bRet = ReadFile(this->hFile,this->fileBuffer,this->currentBufferSize,&howMuchWasRead,lpOverlapped);
this->lastError = GetLastError();
if (this->lastError == ERROR_IO_PENDING){
while(!HasOverlappedIoCompleted(this->lpOverlapped)){}
error = true;
} else {
error = false;
}
} while (error == true);
Эта версия теперь возвращает мне ERROR_INVALID_PARAMETER 87 (0x57)
, для 4 ГБ .isoфайл, размер буфера составляет 100 МБ.