C++ Windows上的流文件刷新力

C++ Windows上的流文件刷新力,c++,visual-studio,visual-c++,windows-7,C++,Visual Studio,Visual C++,Windows 7,我正在使用流的将数据写入文件。我经常对文件调用flush,但备份文件并不总是在那个时候得到更新。我假设这与操作系统级缓存或MSVC库中的某些内容有关 我需要一种方法让数据在那一点上正确刷新。最好写入光盘,但至少足以使另一个程序的复制操作能够看到到刷新点的所有数据 我可以使用什么API来执行此操作?将刷新Windows写入文件缓存并将其写入文件。请注意,如果反复调用,它可能会非常慢 我还发现了这篇描述()用法的文章。这可能对您更有用,因为您正在使用ofstream CXXFileBuf.flush

我正在使用流的
将数据写入文件。我经常对文件调用
flush
,但备份文件并不总是在那个时候得到更新。我假设这与操作系统级缓存或MSVC库中的某些内容有关

我需要一种方法让数据在那一点上正确刷新。最好写入光盘,但至少足以使另一个程序的复制操作能够看到到刷新点的所有数据

我可以使用什么API来执行此操作?

将刷新Windows写入文件缓存并将其写入文件。请注意,如果反复调用,它可能会非常慢

我还发现了这篇描述()用法的文章。这可能对您更有用,因为您正在使用ofstream

CXXFileBuf.flush();
_commit(CXXFileBuf.rdbuf()->fd());

如果这是仅限windows的解决方案,则可能需要使用。这意味着您必须重新编写一些代码,以适应对
CreateFile()
WriteFile()
等的调用。如果您的应用程序依赖于许多不同的
运算符我使用的:

MyOfstreamObject.rdbuf()->pubsync();
我在Win7和ICC9.1上使用stl_端口


我还没有对解决方案进行广泛测试,但它似乎有效。。。也许它可以解决edA qa mort-ora-y注意到的缺少fd()的问题。

只需将
commode.obj
添加到Visual Studio中的链接器->输入->项目属性页中的其他依赖项,并调用
std::ostream::flush()
。这样,std::ostream的flush将链接到另一个具有所需行为的方法。这对我很有帮助

stl流中没有这样的
fd
函数…?有人怎么了
->fd
吗?不幸的是,他们似乎需要无缓冲模式来正确调整块的大小和对齐。真的太糟糕了。我必须反复调用FlushFileBuffers。