如何写一个文件,然后读出来,以验证其内容,以确保你得到什么是磁盘不缓存上

我使用的是Windows本地/ C ++ / Win32的/ MFC代码,以节省通过MFC序列化的文档文件。 我插入我自己的CFile派生类在写作过程中给了我对数据的访问作为其被写入。 这让我计算的数据作为其走出去文件的校验和(或散列等)。

这些文件已保存后,我想允许验证文件的选项。 这个想法是重新打开该文件,并通过它读取验证校验和/散列/等。

我不知道,不过,如果它有可能是刚刚写入的文件后,操作系统可以给我未写入的数据,当我读回文件的时候了。 在这种情况下,试验并没有真正告诉我,文件看起来在磁盘上良好。

是我所关注是否有效? 如果是这样,有没有办法来避免这个问题?

--------------解决方案-------------

如果你正在使用的CFile,你可以调用的CFile ::冲洗 ,以确保一切都写入磁盘。 根据documenatation

virtual void Flush( );

迫使剩余的文件缓冲器的任何数据被写入到该文件

如果你真的想这样做,那么你可以通过指定避免磁盘高速缓存和缓存FILE_FLAG_NO_BUFFERING和/或FILE_FLAG_WRITE_THROUGH打开文件时。 要注意的是使用这些选项将事情复杂化。

该文件或设备与任何系统缓存读取和写入数据被打开。 此标志不影响硬盘的缓存或内存映射文件。 有与使用的CreateFile FILE_FLAG_NO_BUFFERING标志,详见文件缓冲打开的文件成功合作严格的要求。

一个更简单的替代方法是调用FlushFileBuffers您关闭文件句柄之前。

我不知道这个问题的答案。 但是,我知道去哪里找。

SQLite的保证数据安全地写入到磁盘,不管发生什么事 - 即使停电。 他们必须做你需要什么,他们的代码是开源的,精美的评论。

SQLite中单个事务内的所有变化或者发生完全或根本没有,就算写出磁盘变化的行为被中断

程序崩溃,

操作系统崩溃,

或电源故障。

前一段的索赔在SQLite的回归测试套件采用了特殊的测试工具,模拟在操作系统崩溃和电源故障的数据库文件的影响广泛的检查。

http://sqlite.org/transactional.html

分类:C# 时间:2012-07-14 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.606 (s). 10 q(s)