水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:请教一个ofstream的flush问题
楼主
|
fishingriver
|
2022-03-24 09:58:55
|
展开
我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
文件close都执行完一段时间了,数据才会写完。
如果我想close返回时就写完,应该怎么做呢?
多谢多谢!
--
FROM 218.249.50.*
19楼
|
fishingriver
|
2022-04-06 19:00:00
|
展开
谢谢大家,问题还没解决,请再支支招。
我现在的问题是这样的:
(1)我的程序里会产生数据,然后把数据以文本文件的方式写到硬盘上,然后我通知另一个人的程序,把数据读走。
数据量不确定,1G左右或更多。
现在的问题是,我的程序已经写完数据了,ofstream 已经执行完flush和close了,但文件还没写完。所以我现在不知道什么时候通知对方来读数据。
(2)我换一个方式去写这个本文文件,会不会写的更快,能不能解决掉这个close完还没写完的问题?
【 在 fishingriver 的大作中提到: 】
: 我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
: 文件close都执行完一段时间了,数据才会写完。
: 如果我想close返回时就写完,应该怎么做呢?
: ...................
--
FROM 223.104.41.*
28楼
|
fishingriver
|
2022-04-07 20:35:12
|
展开
多谢回复,这样的话,就是说只要我写完,他就可以读了。
我之前没把我的应用讲清楚,是这样的:
(1)对方并不在本地开打和读写我的文件,他会用把我写好的文件传到服务器上。这种情况,是不是我也可以在我close之后,立刻通知他,他就可以立刻上传了?
(2)他上传我产生的数据,是不是也得先把数据弄到缓存里才能上传,而我写的数据已经在缓存里了,这个缓存对于我的程序和他的程序都是透明可以访问的,所以我一close,他就可以上传了?
(3)我有的时候需要写好几个文件,然后再通知他。我发现有时我写完最后一个文件都close了,但之前还有几个文件,名字都没出现在硬盘上。得过一阵子文件才会开始出现在硬盘上。这种情况我也可以写完最后一个文件并且close之后(这时还有几个文件没出现在硬盘上),就可以通知他了吗?
【 在 yangtou 的大作中提到: 】
: 这个肯定是你的程序的问题。
: 对于写入文件,如果有缓存,读的一方程序同样也能看到缓存。数据在缓存里,读方就直接从缓存处理数据;数据在磁盘没有缓存,读方就要先让os把数据加载到缓存,再在缓存里面处理。写方的数据有没有存到磁盘上根本不影响读方的行为。
: 至于读写同步,写入方需要通知读取一方写入多少数据了,可以用各种加锁,ipc或者消息队列之类进行同步。
: ...................
--
FROM 223.104.40.*
32楼
|
fishingriver
|
2022-04-08 16:22:47
|
展开
还在实习阶段
【 在 ziqin 的大作中提到: 】
: 讲真,这个水平,你们公司是认真的嘛?
: 文件系统的内部操作对使用者是透明的,这是基本原则,如果一个process close的句柄,另外一个process不能打开的话,要么是你的程序出错了,要么是你用的文件系统的API有问题,可能是异步api之类,这种情况你需要去读文件系统api的文档。但是总之,和文件系统没有关系
:
--
FROM 218.249.50.*
33楼
|
fishingriver
|
2022-04-08 21:59:35
|
展开
(1)他如果在上传前想把我生成的几个文件打包压缩一下,不是直接上传,是不是打包操作也得先读我的文件?
: 肯定是你的程序bug了
(2)这块好像不是bug,我的几个文件,比如文件1到文件6,都能生成,但最后一个写完close之后,不是每个文件名都立刻出现在硬盘上,但最后经过若干时间之后,还是会出现在硬盘上的。
(3)对于写文本文件而言,ofstream是不是比较慢的,有明显更快的方式吗?
【 在 jimmycmh 的大作中提到: 】
: 他不在本地打开读,怎么上传?
: 只要机器不掉电,缓存就是透明的,不用关心。不过还是建议你去研究一下操作系统的文件系统部分
: 肯定是你的程序bug了
--
FROM 223.104.40.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版