无需系统和硬盘缓存即可写入文件

Szy*_*ski 5 c++

如何在不使用系统缓存和驱动器缓存的情况下在 C++ 中向文件写入内容?我只想在硬盘上准确写入,而不管所有系统缓存设置。

MSN*_*MSN 5

除非您正在编写磁盘设备驱动程序,否则无法保证写入时不会进行任何缓存或处理。

C 运行时库公开fflush(FILE *)执行此操作。WindowsFlushFileBuffers还有一个可以传递给CreateFile( FILE_FLAG_NO_BUFFERING) 的标志(它本身对您可以执行的操作添加了限制)。

尝试绕过写入缓存的另一种方法是使数据结构能够适应部分故障。对于文件,一种流行的技术是在写入文件的其余部分后写出文件的标头。假设墨菲而不是马基雅维利行为,这应该足够了。

或者使用操作系统提供的文件替换或事务功能(请参阅ReplaceFileTransactional NTFS for Windows)。