【发布时间】:2017-09-22 15:35:33
【问题描述】:
我有一个代码在重新映射之前使用 MapViewOfFile 和 FlushViewOfFile 写入文件。
我还有第二个代码,它在同一进程的其他线程中使用 MapViewOfFile 从同一个文件(在磁盘上,而不是 HANDLE/映射对象)读取。
视图的标志是 PAGE_READONLY/FILE_READ 和 PAGE_READWRITE/FILE_WRITE。
在我的电脑上一切正常。 但是当相同的构建作为服务在其他 PC 上运行时,它有一个奇怪的错误: 当我用偏移量 == 0 重新映射阅读器(这意味着 UnmapViewOfFile + MapViewOfFile)(以读取一些文件头)时,它不会返回任何错误,但读取本身会返回一些旧值,这些值已经被其他线程更改。
当我打开 ProcessMonitor 时,它显示没有从 offset = 0 读取,只有写入。
所以,问题是新调用 CreateFileMapping/MapViewOfFile 成功返回,但映射了一些旧的缓存页面,并且没有从文件中读取新数据。
再一次,同样的构建在我的 PC 上运行良好。
任何人都可以提出一些建议吗?谢谢。
【问题讨论】:
-
看起来问题出在 FlushViewOfFile 上。我已将阅读切换到简单的 ReadFile,它在本地电脑上运行良好,但是当我尝试从另一台电脑(使用简单的 ReadFile)读取此文件时也会出现同样的问题..