首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

循环保存,该怎么解决

2012-04-01 
循环保存我想实现如下功能:从网络接收实时的wav数据,把接收到的数据实时保存成音频WAV文件。这些都已经实现

循环保存
我想实现如下功能:

从网络接收实时的wav数据,把接收到的数据实时保存成音频WAV文件。这些都已经实现了。
如果我想只保存最后2小时的数据为WAV文件该怎么实现,请达人指点。

谢谢!

[解决办法]
文件都有创建时间、等信息的 你判断一下
或者做一个记录文件,里面记录所有文件是生成的时间,文件名字
保存的时候按照时间排序来操作
[解决办法]
放到一个20M的队列里,到结束时保存。
[解决办法]
存到数据库最好了
[解决办法]

探讨
不知道是否没有表达清楚:想实现
比如说:我要保存20M的WAV文件,已经保存了20M了,那怎么来实现我在文件后面追加保存1M,就把文件前面最先保存的1M数据给清除掉。

[解决办法]
文件用读写打开,然后用fseek不行吗?
[解决办法]
没有这么简单吧,音频还有格式索引的问题呢
[解决办法]
要删除的话,两个方案
1.建一数据结构,以块为单位,用顺序文件方式,结构中放一删除标记,类似于:
struct {
int deleteID;
byte date[1024];
};
但这样生成的WAVE文件,是自己的格式,最终要转换一下。
2.每次重新生成文件,将原文件COPY过来,这个效率低些。
如果能写一个链表式的文件,当然最好,但过于复杂。
[解决办法]
建立两个文件A,B循环保存最近两小时的数据和前两小时的数据,
从A开始保存
A写满了两小时就往B里面写
B写满了2小时把A删掉重新写A
如此循环
这样就可以保证最近两小时的数据肯定在 A,B中

当需要提取 查询数据的时候,就返回当前整个文件 + 另一个文件的尾部
比如 COPY 到文件 C
[解决办法]
1,用filewrite在文件尾追加写入1M,现在文件是21M
2,重新创建一个新文件,写入原文件从头偏移1M开始到文件尾,新文件20M

热点排行