Перезапись файла большого размера - C (СИ)
Формулировка задачи:
Помогите реализовать запись в тот же файл с которого было произведено чтение через буфер,приходиться работать с файлами больших размеров (>80 Гб),а у WinAPI функций WriteFile и ReadFile предел в 4 Гб (параметр передающий с какого байта читать\писать буфер принимает DWORD значение максимальный размер которого 4294967295 что равняеться 4 Гб).К тому же при перезаписи если данные в буфере были изменены (другой участок моего кода),то в файл они попадают через блок,т.е. блок оригинального файла,блок измененного буфера и так чередуются до конца файла.Компилирую MinGW.Код вот -
#include <windows.h> #include <stdio.h> #include <stdbool.h> BYTE buf[16777216]; DWORD buflen; HANDLE file; int main() { file = CreateFile("C:\\RW.BIN", GENERIC_READ | GENERIC_WRITE, 0,NULL, OPEN_EXISTING,0,NULL); while(ReadFile(file,buf,16777216,&buflen,0) && buflen > 0){ WriteFile(file,&buf,buflen,&buflen,0); } }
Хотя зря я в этой ветке написал,код компилится и C++ компилятором,лучше было создать тему в C++ и WinAPI.Тем не менее пишу и компилирую С код.C++ 'ом не компилировал до того как написал тему
Хотя и WinAPI здесь имеет косвенное отношение, т.к. его средства чтения/записи не удовлетворяют моим требованиям по размеру
Решение задачи: «Перезапись файла большого размера»
textual
Листинг программы
descript1 = CreateFile("input.txt", GENERIC_READ, FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0,NULL); if (INVALID_HANDLE_VALUE == descript1) { // ... } descript2 = CreateFile("input.txt",GENERIC_WRITE, FILE_SHARE_READ,NULL, OPEN_EXISTING,0,NULL); if (INVALID_HANDLE_VALUE == descript2) { // ... }
Объяснение кода листинга программы
descript1 = CreateFile(
input.txt, GENERIC_READ, FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0,NULL);
- в этой строке кода создается дескриптор файла с именемinput.txt
, который будет использоваться для чтения файла. Если файл не существует или не может быть открыт, то возвращается значение INVALID_HANDLE_VALUE и код в блоке if будет выполнен.descript2 = CreateFile(
input.txt, GENERIC_WRITE, FILE_SHARE_READ,NULL, OPEN_EXISTING,0,NULL);
- в этой строке кода создается дескриптор файла с именемinput.txt
, который будет использоваться для записи в файл. Если файл не существует или не может быть открыт, то возвращается значение INVALID_HANDLE_VALUE и код в блоке if будет выполнен.- Дальнейший код должен быть написан внутри блоков if для обработки ошибок открытия файла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д