Отображение файлов на память

397
20 октября 2017, 14:39

Дано два файла, нужно переписать содержимое одного в другой. При этом надо переписывать по 1024 байта.

void FileCopy(int size)
{
HANDLE startMap, endMap;
HANDLE start = CreateFile(L"Test1.txt", GENERIC_READ, FILE_SHARE_READ,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
    NULL);
HANDLE end = CreateFile(L"Test2.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
startMap = CreateFileMapping(start, NULL, PAGE_READONLY, 0, 0, NULL);
endMap = CreateFileMapping(end, NULL, PAGE_READWRITE, 0, size*1024*1024, NULL);
     char buf[1024];
}

size - размер файла в мегабайтах. Запись должна производиться в массив buf, а потом в файл и так до тех пор, пока один файл не будет полностью скопирован, т.е. поблочное копирование. Застрял на этом моменте, не подскажите. как делать дальше?

Answer 1

После CreateFileMapping вызывайте MapViewOfFile и получите указатель на отображение файла в памяти. Потом копирование и освобождение ресурсов в обратном порядке.

READ ALSO
Перегрузка опертора [] c++ для создания двумерного массива

Перегрузка опертора [] c++ для создания двумерного массива

Есть класс, который хранит в себе двумерный массив QVector(Аналог std::vector в Qt)

267
помогите с с++ пж [требует правки]

помогите с с++ пж [требует правки]

Вставьте в двумерный массив столбец из нулей после столбца с номером KKВ первой строке даны числа NN, MM и KK (1≤N,M,K≤5001≤N,M,K≤500; K≤MK≤M) — количество...

302
Когда нужно вызывать GetExitCodeProcess

Когда нужно вызывать GetExitCodeProcess

Функцию GetExitCodeProcess нужно вызывать до, или после CloseHandle?

245