我尝试在文件作为从另一个进程映射的文件打开时写入文件,但它失败了。
请看代码片段:
access = GENERIC_READ | GENERIC_WRITE;
share = FILE_SHARE_READ | FILE_SHARE_WRITE;
disposition = OPEN_EXISTING;
HANDLE fileHandle = CreateFileA(fileName.c_str(), access, share, 0, disposition, 0);
//...
unsigned long valProtect = 0;
//...
valProtect = PAGE_READWRITE;
//...
const HANDLE mappingHandle = CreateFileMapping(fileHandle, 0, valProtect, 0, 0, 0);
//...
this->m_access = FILE_MAP_ALL_ACCESS;
//...
this->m_startAddress = (uint8_t*)MapViewOfFile(mappingHandle, this->m_access, 0, 0, 0);
//...
CloseHandle(fileHandle);
此时文件已关闭(它是句柄)但映射到地址空间。我在记事本++中打开这个文件,修改它并尝试保存,但我看到消息:
“请检查此文件是否在另一个程序中打开。”
所以我不能从另一个进程重写它,好像它的写入权限被锁定了。
如果我未映射文件,例如:
UnmapViewOfFile(this->m_startAddress);
然后我无法再次重写文件。
我做错了什么?