Это на самом деле 16 ТБ (для тех, кто найдет это в будущем). Я только что создал 6710886400, это 6 ГБ файл с использованием перекрывающегося ввода-вывода - следующий фрагмент показывает, как работать со смещениями
ПЕРЕКРЫТЫЙ ол;
__int64 fileOffset;
ol.hEvent = CreateEvent (0, ИСТИНА, ЛОЖЬ, 0);
fileOffset = __int64 (TEST_BUFFER_SIZE) * i;
ol.Offset = (DWORD) fileOffset;
ol.OffsetHigh = (DWORD) (fileOffset >> 32);
printf ("[% d% I64d]", i, fileOffset);
результат = WriteFile (hFile, буфер, TEST_BUFFER_SIZE, & writing, & ol);
чтобы получить размер, который я могу выполнить ...
DWORD dwHigh, dwLow =GetFileSize(hFile, &dwHigh);
__int64 FileSizeInBytes = __int64(dwHigh * (MAXDWORD + 1.0L)) + dwLow;
СОВЕТ: Если вы начинаете получать коды ошибок / недопустимых параметров из API, вы, вероятно, путаете математику и передаете отрицательные смещения.
(некоторые невинные переменные и действие политик обработчика исключений были удалены из этого образца для защиты основных прав байтов)