最近遇到的问题
春节这几天,除了探亲访友,就是解决一系列的 Bug。我发现,用 CreateFile 打开一个分区后,再用 CreateFile 打开同一分区下的一个文件,并修改它,这时,再用 WriteFile 操作这个分区的 FAT,将无法实际写入分区——即使用 ReadFile 读出数据确认确实修改了,但实际数据并未修改。对于这个问题,可以在修改文件之前先用 CloseHandle 关闭分区,再在修改完文件后打开分区。
另外,如果在打开文件(CreateFile)时没有加 FILE_FLAG_WRITE_THROUGH 参数,还会有一点其它问题。经常是在程序中修改了文件内容,再读文件的 Short Directory Entry,发现其中的文件大小仍然是修改前的大小。似乎用 FlushFileBuffers 可以把系统缓存写回磁盘,但我没成功。另外,好像 CreateFile 打开分区,不管加不加 FILE_FLAG_WRITE_THROUGH 都默认是不是用缓存。
总之,感觉通过 CreateFile 直接操作磁盘确实很方便,但是也有互斥上的问题,因为 CreateFile 要求打开分区必须加上 FILE_SHARE_WRITE。通过中断操作磁盘应该就不会有这样的问题,但是那就比较麻烦了。
没有评论:
发表评论