数据写入内存,然后从内存写入文件

江南烟雨梦 2010-02-01 10:39:15
需要生成一个文件,但是必须把数据“完整”写入之后,再生成新文件,去覆盖同名的旧文件;
1、数据写入内存,2、然后从内存写入文件,有什么好的方法吗?
...全文
988 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
耍宝王 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jackzhhuang 的回复:]
我不觉得这个方法笨,恰恰这是比较好的方法,我觉得。

改进一下可以这么办:

申请一部分内存(默认可以是4KB),写满后往临时文件写,再继续写内存,如此循环直到写完。
[/Quote]
同意,使用临时文件,可以保证在正常的完成全部处理前,原文件不会因意外被破坏

数据写入内存这方面,我也感觉用STL比较好,不会浪费内存,而且还提供了很好的算法来处理
首先确定文件的内容是什么(一般的文字还是特定的二进制数据结构),如果是文字,可以直接读入STL的string中,如果二进制数据结构,单结构就定义此类结构直接读入,多结构就定义此类结构,逐个读入然后放入STL的vector、list等中(容器按操作特点选择)
江南烟雨梦 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 flyerwing 的回复:]
CArchive
这个不知道行不?

[/Quote]
使用标准C++,不用MFC.
江南烟雨梦 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lbjfeng 的回复:]
那就不那样子呗…………

往内存中写东西,其实没你想象的那么抽象,本质也就是把数据暂时存放在内存中罢了…………

你可以申请很大很大一块内存,放置数据,想写什么就写什么……

然后最后检验一下,写入文件,搞定
[/Quote]
这样是不是有点不可靠——内存申请太小,不够;或者太大,浪费呢?
flyerwing 2010-02-01
  • 打赏
  • 举报
回复
CArchive
这个不知道行不?
lbjfeng 2010-02-01
  • 打赏
  • 举报
回复
那就不那样子呗…………

往内存中写东西,其实没你想象的那么抽象,本质也就是把数据暂时存放在内存中罢了…………

你可以申请很大很大一块内存,放置数据,想写什么就写什么……

然后最后检验一下,写入文件,搞定
江南烟雨梦 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crst_zh 的回复:]
可以先生成一个临时文件啊,生成完毕之后删掉旧文件,临时文件改名。
[/Quote]
这方法太笨了,不行噢 !
crst_zh 2010-02-01
  • 打赏
  • 举报
回复
可以先生成一个临时文件啊,生成完毕之后删掉旧文件,临时文件改名。
hai040 2010-02-01
  • 打赏
  • 举报
回复
可以用stringstream
用法跟fstream差不多
江南烟雨梦 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hqin6 的回复:]
先从文件读入数据,然后将数据存入文件,有问题??
[/Quote]
不是从文件读入内存,再内存到文件啊!

程序直接写数据到内存中,写完后,再写入文件.
关键是第一步,我不太熟悉,请教!
太乙 2010-02-01
  • 打赏
  • 举报
回复
先从文件读入数据,然后将数据存入文件,有问题??
z569362161 2010-02-01
  • 打赏
  • 举报
回复
shiweifu 2010-02-01
  • 打赏
  • 举报
回复
write...
fwrite
jackzhhuang 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crst_zh 的回复:]
可以先生成一个临时文件啊,生成完毕之后删掉旧文件,临时文件改名。
[/Quote]

我不觉得这个方法笨,恰恰这是比较好的方法,我觉得。

改进一下可以这么办:

申请一部分内存(默认可以是4KB),写满后往临时文件写,再继续写内存,如此循环直到写完。
JAnswer 2010-02-01
  • 打赏
  • 举报
回复
如果是mfc可以使用CMemFile类。。。至于用法查一下就知道了
looklzg1108 2010-02-01
  • 打赏
  • 举报
回复
使用结构体
江南烟雨梦 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 crst_zh 的回复:]
引用 10 楼 beyond0824 的回复:
引用 8 楼 flyerwing 的回复:
CArchive
这个不知道行不?


使用标准C++,不用MFC.


动态内存申请?听过没?你可以用STL
考虑效率的话你最好开始能预估一个最大的内存申请量,以避免重新分配带来的开销。
[/Quote]


stringstream sstr;
ofstream fout;
char *data;
......
sstr << data;
fout.open("filename");
fout << sstr.str();
......

crst_zh 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 beyond0824 的回复:]
引用 8 楼 flyerwing 的回复:
CArchive
这个不知道行不?


使用标准C++,不用MFC.
[/Quote]

动态内存申请?听过没?你可以用STL
考虑效率的话你最好开始能预估一个最大的内存申请量,以避免重新分配带来的开销。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧