#include <Windows.h>
#include <iostream>
#include <string>
void test_file_mapping_writer() {
std::string szPath{ "e:\\temp\\md.1.bin" };
HANDLE h_dump_file = ::CreateFileA(
szPath.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
//OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL); //观察文件,尺寸为0
//auto _size = 1 << 20; //M
auto _size = 1 << 30; //G
HANDLE h_file_mapping = CreateFileMapping(h_dump_file,
NULL,
PAGE_READWRITE,
0,
_size,
NULL); //观察文件,尺寸为_size
if (NULL == h_file_mapping) {
auto _err_code = ::GetLastError();
std::cerr << "CreateFileMapping() error:" << _err_code << "\n";
return;
}
void * buffer = MapViewOfFile(h_file_mapping,
FILE_MAP_ALL_ACCESS,
0,
0,
_size); // 经过这一步,文件大小就已经变为_size.
CloseHandle(h_file_mapping);
CloseHandle(h_dump_file);
memcpy(buffer, "1qaz@WSX3edc$RFV", 16); //观察文件内容已变过来了。
FlushViewOfFile(buffer, 0);
UnmapViewOfFile(buffer);
}
int main()
{
test_file_mapping_writer();
std::cout << "Hello World!\n";
}