none
内存映射文件时,我希望当我手动刷新时才真正将内存中的改动写入文件,如何实现? RRS feed

  • 问题

  •         由于要对大文件操作,很大的那种,所以选择了内存映射,但是随即问题也来了,我希望操作文件后,可以选择放弃刚才的改动,也就是说需要我执行某个操作时才会真正将改动写入到文件中,否则刚才的改动全部放弃,似乎内存映射不支持这个特性

            记录改动点也不可能,因为改动点数量过于庞大,建立另外一份拷贝也不可能(文件过大,会严重浪费资源),所以有什么好的办法解决这个问题没有?

    2010年8月10日 7:34

答案

  • FlushViewOfFile 应该可以吧

    2011年4月12日 5:29
  • yes, 配合UnmapViewOfFile 使用
    麻烦把正确答案设为解答。
    2011年4月12日 5:52
    版主
  • try this function:
    FlushFileBuffers();

     1、在UnmapViewOfFile、CloseHandle和系统回收物理内存的时候写入磁盘。当进程结束时(包括正常和异常),系统会自动关闭该进程打开的所有Handle,所以会写入磁盘。除非是内核代码异常,导致死机,这时才可能没有写入。
    2、FlushViewOfFile是为了实现程序自己控制写入磁盘而提供的,

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    2011年4月12日 7:33
    版主

全部回复

  • FlushViewOfFile 应该可以吧

    2011年4月12日 5:29
  • yes, 配合UnmapViewOfFile 使用
    麻烦把正确答案设为解答。
    2011年4月12日 5:52
    版主
  • try this function:
    FlushFileBuffers();

     1、在UnmapViewOfFile、CloseHandle和系统回收物理内存的时候写入磁盘。当进程结束时(包括正常和异常),系统会自动关闭该进程打开的所有Handle,所以会写入磁盘。除非是内核代码异常,导致死机,这时才可能没有写入。
    2、FlushViewOfFile是为了实现程序自己控制写入磁盘而提供的,

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    2011年4月12日 7:33
    版主