- 主题:请教一个ofstream的flush问题
我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
文件close都执行完一段时间了,数据才会写完。
如果我想close返回时就写完,应该怎么做呢?
多谢多谢!
--
FROM 218.249.50.*
linux的话,试试fsync或sync,windows好像是_commit?不太确定
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
: 文件close都执行完一段时间了,数据才会写完。
: 如果我想close返回时就写完,应该怎么做呢?
: ...................
--
FROM 222.128.5.*
对于数据量不大,比如少于1G字节,我都是用QByteArray或者QStringList临时变量来存
放要写的内容,然后创建一个QSaveFile对象,打开,用write函数一次性写入,最后用
commit函数一把提交关闭。
【 在 gameplayer (*.*) 的大作中提到: 】
: linux的话,试试fsync或sync,windows好像是_commit?不太确定
--
FROM 119.233.242.*
你是用什么办法确定数据没写完的?
这里一般有两个缓存:
1. ofstream 的缓存。
2. 操作系统缓存。
flush() 是针对 ofstream 的。正常做完 flush,你在另外一个进程就能看到内容变化。
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
: 文件close都执行完一段时间了,数据才会写完。
: 如果我想close返回时就写完,应该怎么做呢?
: ...................
--
FROM 47.243.39.*
谢谢群主,谢谢大家,问题还没解决,请再支支招。
我现在的问题是这样的:
我的程序里会产生数据,然后把数据写到硬盘上,然后我通知另一个人的程序,把数据读走。
数据量不确定,1G左右或更多。
现在的问题是,我的程序已经写完数据了,ofstream 已经执行完flush和close了,但文件还没写完。所以我现在不知道什么时候通知对方来读数据。
【 在 hgoldfish 的大作中提到: 】
: 你是用什么办法确定数据没写完的?
: 这里一般有两个缓存:
: 1. ofstream 的缓存。
: ...................
--
FROM 223.104.41.*
你close之后就可以了,即使有os缓存也不影响对方读
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 谢谢群主,谢谢大家,问题还没解决,请再支支招。
: 我现在的问题是这样的:
: 我的程序里会产生数据,然后把数据写到硬盘上,然后我通知另一个人的程序,把数据读走。
: ...................
--
FROM 222.128.5.*
我的问题是对方并不在本地开打和读写文件,他会用把我写好的文件传到服务器上
这种情况下,是不是只要我close了,也不影响他上传文件?操作系统底层会自己处理好?
【 在 gameplayer 的大作中提到: 】
: 你close之后就可以了,即使有os缓存也不影响对方读
:
--
FROM 218.249.50.*
对,close之后上传就行了
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 我的问题是对方并不在本地开打和读写文件,他会用把我写好的文件传到服务器上
: 这种情况下,是不是只要我close了,也不影响他上传文件?操作系统底层会自己处理好?
--
FROM 222.128.5.*
多谢多谢!
(1)请问是不是这样的:他上传我产生的数据,也得先把数据弄到缓存里才能上传,而我写的数据已经在缓存里了,这个缓存对于我的程序和他的程序都是透明可以访问的,所以我一close,就可以通知他,他也可以立刻就上传,这样对于他更省时间,因为他不用把我的数据弄到缓存里了?
(2)我有的时候需要写好几个文件,然后再通知他。我发现有时我写完最后一个文件都close了,但之前还有几个文件,名字都没出现在硬盘上。得过一阵子文件才会开始出现在硬盘上。这种情况我也写完最后一个文件并且close之后(这时还有几个文件没出现在硬盘上),就可以通知他了吗?
【 在 gameplayer 的大作中提到: 】
: 对,close之后上传就行了
:
:
--
FROM 223.104.40.*
是的
close后应该能看到,没看到的话刷新一下试试
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 多谢多谢!
: (1)请问是不是这样的:他上传我产生的数据,也得先把数据弄到缓存里才能上传,而我写的数据已经在缓存里了,这个缓存对于我的程序和他的程序都是透明可以访问的,所以我一close,就可以通知他,他也可以立刻就上传,这样对于他更省时间,因为他不用把我的数据弄到缓存
: (2)我有的时候需要写好几个文件,然后再通知他。我发现有时我写完最后一个文件都close了,但之前还有几个文件,名字都没出现在硬盘上。得过一阵子文件才会开始出现在硬盘上。这种情况我也写完最后一个文件并且close之后(这时还有几个文件没出现在硬盘上),就可以通
: ...................
--
FROM 222.128.5.*