我想通过直接读写磁盘来修改文件。当我用WriteFile写入数据的时候,为什么要等重启后才能看到修改后的文件?不重启的话看到的还是之前的文件内容。
我在网上查了下,说是因为缓存的原因。那有没有办法在重启之前也能看到我修改过的文件内容呢?

解决方案 »

  1.   

    WriteFile()了以后,有CloseHandle(hFile);操作吗?
      

  2.   

    WriteFile之后,要么FlushFile,要么CloseHandle
      

  3.   

    都不对啊。这么说吧,比如我用winhex打开C盘(NTFS格式),然后找个C盘下某个文件(1.txt)的MFT,将其中的数据内容作修改,保存关闭。然后双击打开这个txt文件后发现他并没有改变,重启后才改过来。
      

  4.   

    用UE之类的打开是可以看到他变了。我现在的是希望用notepad打开也行
      

  5.   

    恩,文件系统有缓存。
    怎么清除cache,估计得需要驱动代码介入
      

  6.   

    1. CreateFile with FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH
    2. winhex是打开卷有建立快照的, 你写入成功后, 得更新快照再看
      

  7.   

    搞错LZ意思了
    LZ想实现清缓存功能, 某人透露过 
    先CreateFile("\\\\.\\C:") CloseHandle
    再看看
    我未测试过是否能用
      

  8.   

    这个方法也测试过了。
    我发现不是因为CreateFile("\\\\.\\C:") 的原因。是因为在我的程序运行前打开过目标文件,它就会存在于缓存中。我的程序只能改写磁盘上的数据而不能改变缓存中的内容。再次打开目标文件时是优先从缓存中读取。