首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何刷新TFileStream?

如何刷新TFileStream?
EN

Stack Overflow用户
提问于 2009-04-24 18:23:02
回答 4查看 7.2K关注 0票数 18

TFileStream提供缓冲输出,这在大多数情况下都很好,但在某些情况下(特别是在调试期间),立即刷新缓冲区是很好的。问题是,除了调用Free之外,我不知道有什么方法可以做到这一点,这是一种适得其反的做法。

有没有更好的方法呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-24 18:30:53

你需要冲洗这条小溪。尝试:

代码语言:javascript
运行
复制
 FlushFileBuffers(fs.Handle); 

?你看过/试过这个吗?

票数 29
EN

Stack Overflow用户

发布于 2009-04-24 18:47:16

我认为altCognito的答案(FlushFileBuffers)可能是最好的,但这只是因为TFileStream本身不做缓冲。对于其他缓冲的流,应该首先查看流是否提供了Flush方法。作为最后的手段,您可能会使用Seek(Begin)然后Seek(CurrentPos)的老把戏。

票数 6
EN

Stack Overflow用户

发布于 2009-04-24 20:59:32

这有点复杂,但实际上您可以在(win32应用程序接口) CreateFile的调用中控制很多行为。您可以添加FILE_FLAG_WRITE_THROUGH / FILE_FLAG_NO_BUFFERING,甚至可以使用FILE_FLAG_SEQUENTIAL_SCANFILE_FLAG_RANDOM_ACCESS为缓存系统提供优化提示。要以这种方式使用TFileStream,我认为您需要覆盖Create来更改它获取文件句柄的方式。FlushFileBuffers相当于文件上的关闭/打开。如果你做了很多重复刷新的活动,这会大大减慢代码的速度。

一些文档here

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/787019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档