Windows 我可以内存映射一个文件,并且仍然允许其他进程写入它吗?

Windows 我可以内存映射一个文件,并且仍然允许其他进程写入它吗?,windows,winapi,memory,file-io,Windows,Winapi,Memory,File Io,我正在使用以下代码对文件进行内存映射,以便在windows(windows 10)中读取: 我仍然希望其他人在我阅读此文件时写入此文件。这可能吗 目前,我遇到如下错误: 进程无法访问该文件,因为其他进程正在使用该文件 上面的错误是在我将文件映射到内存时,试图在单独的程序(记事本)中打开该文件时收到的 这是操作系统如何将文件映射到内存的限制,还是我丢失了一些标志 编辑: @zett42指出,我缺少文件\u SHARE\u READ添加此代码: HANDLE windowsFileHdl = Cre

我正在使用以下代码对文件进行内存映射,以便在windows(windows 10)中读取:

我仍然希望其他人在我阅读此文件时写入此文件。这可能吗

目前,我遇到如下错误:

进程无法访问该文件,因为其他进程正在使用该文件

上面的错误是在我将文件映射到内存时,试图在单独的程序(记事本)中打开该文件时收到的

这是操作系统如何将文件映射到内存的限制,还是我丢失了一些标志

编辑: @zett42指出,我缺少文件\u SHARE\u READ添加此代码:

HANDLE windowsFileHdl = CreateFileA(filePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (windowsFileHdl == INVALID_HANDLE_VALUE)
{
  return false;
}

HANDLE fileMappedHdl = CreateFileMappingA(windowsFileHdl, 0, PAGE_READONLY, 0, 0, nullptr);
char* baseFileData = (char*)MapViewOfFile(fileMapedHdl, FILE_MAP_READ, 0, 0, 0);
现在,记事本可以打开并写入文件了

但是,其他程序,如VisualStudio、Notepad++或Emacs,在写入文件时仍然存在错误

Visual Studio错误:

进程无法访问该文件,因为其他进程正在使用该文件

记事本++错误:

无法保存该文件,它可能受到保护。是否要在管理员模式下启动记事本+


即使可以,您如何计划确保来自其他进程的写入在映射文件的进程中完整且完全可见?您缺少
文件\u共享\u读取
@zett42谢谢!是的,我忘了。我现在可以打开它并用记事本编辑。但是,对于记事本++之类的其他程序,我会收到一个错误,指出该文件可能仍然受到保护。这是因为这些程序希望以独占方式打开该文件。所以你无法实现你想要的。现在,文件已写入的通知对你没有帮助。你需要的是同步。各方都需要同步。很明显,你所做的并不能解决你的问题,不管它实际上是什么。
HANDLE windowsFileHdl = CreateFileA(filePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (windowsFileHdl == INVALID_HANDLE_VALUE)
{
  return false;
}

HANDLE fileMappedHdl = CreateFileMappingA(windowsFileHdl, 0, PAGE_READONLY, 0, 0, nullptr);
char* baseFileData = (char*)MapViewOfFile(fileMapedHdl, FILE_MAP_READ, 0, 0, 0);