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。