Mas*_*ler 16 delphi buffer flush tfilestream
TFileStream提供缓冲输出,这在大多数情况下都很好,但在某些情况下(特别是在调试期间),立即刷新缓冲区会很好.事情是,除了打电话给Free之外,我不知道有什么方法可以做到这一点,这有点适得其反.
有没有更好的方法呢?
cgp*_*cgp 27
您需要刷新流.尝试:
FlushFileBuffers(fs.Handle);
Run Code Online (Sandbox Code Playgroud)
?你有没有看到/尝试过这个?
我认为altCognito的答案(FlushFileBuffers)可能是最好的,但仅仅因为TFileStream本身不进行缓冲.对于其他缓冲流,应首先查看流是否提供Flush方法.作为最后的手段,你可以使用Seek(Begin)和Seek(CurrentPos)的旧技巧.
小智 6
它有点牵扯,但实际上你可以在调用(win32 api)CreateFile时控制很多行为.您可以添加FILE_FLAG_WRITE_THROUGH/ FILE_FLAG_NO_BUFFERING甚至提供优化提示到缓存系统FILE_FLAG_SEQUENTIAL_SCAN或FILE_FLAG_RANDOM_ACCESS.要以这种方式使用TFileStream,我认为你需要覆盖Create来改变它获取文件句柄的方式.FWIW,FlushFileBuffers相当于文件中的Close/Open.如果你在重复刷新时做了很多活动,它会大大减慢代码的速度.
这里有一些文档
| 归档时间: |
|
| 查看次数: |
6449 次 |
| 最近记录: |