免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5287 | 回复: 15
打印 上一主题 下一主题

[函数] 数据增加/修改/删除过后保存文件函数怎么写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-21 15:53 |只看该作者 |倒序浏览
数据都放在数组保存到文件里。

我对其中的数组增加/删除/修改过后,保存的时候怎么写呢?

我在想着直接跑到以前保存的位置写入,再把后面的移动一下位置.
但是苦于不知道怎么写这个函数,有没有把文件按块移动的函数呢?

或者大家有没有别的更好的方法请指教一下

论坛徽章:
0
2 [报告]
发表于 2005-07-21 16:08 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

哎,文件大么?
要不就直接删了重新写一个吧

论坛徽章:
0
3 [报告]
发表于 2005-07-21 16:16 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

文件大倒是不大。3M左右。不过相对来说已经够大了。供我使用的也仅仅只有10M多的的Flash。内存32M。redhat9的内核(6M左右大小)。
用C语言写。
本来开始想把文件里的东西读到数组里去,结果定义了一个struct strXX lstrXX[40000]程序就溢出了。free看32M里还有10多M空着呢,在定义数组之前
SirFang 该用户已被删除
4 [报告]
发表于 2005-07-21 16:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2005-07-21 16:51 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

建议适当设计数据的格式,使用连接表(如果没有别的麻烦的话)

论坛徽章:
0
6 [报告]
发表于 2005-07-21 16:53 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

增加/删除/修改 ,正是链接表的超级强项,呵呵

论坛徽章:
1
15-16赛季CBA联赛之四川
日期:2016-02-15 17:12:32
7 [报告]
发表于 2005-07-21 20:59 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

mmap

论坛徽章:
0
8 [报告]
发表于 2005-07-22 06:29 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

mmap是好办法.

论坛徽章:
0
9 [报告]
发表于 2005-07-22 08:51 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

下面是我回答别人提出的类似问题的贴子,里面使用的操作适合你的需求,梢未修改一下就得:

楼主的需求是可以做到的,只不过有一点点麻烦而已。假设5515在文件偏移量100处,如果新改写的字符串加上'\0'的字符数量少于5515的字符数量,直接改写就行。如果比5515多,那就要用系统输入输出函数先把文件的长度增加两者的差值,再把后面的数据往后移,空出足够的地方,再写入,简化代码如下:(因为不知道楼主的5515是以int形式写入文件的,还是以四个字符分别写入的,我假设是以5515四个字符写入的)

#include<io.h>;
#include<string.h>;

int i,iFile;
long lSub,lNewLength,lFileSub,lFileLength;
char string[]="abcdef";   //假设这是改写字符串,并且长度大于5515
char temp;
iFile=open("test.dat",O_RDWR);  //以可读可写方式打开文件
lSub=strlen(string)-4+1;   //4是5515字符数量,差值包括'\0';
lseek(iFile,0l,SEEK_END);
lFileSub=tell(iFile)-100-4+1;  //算出5515后面的字节数量;
lFileLength=filelength(iFile);
lNewlength=lFileLength+lSub;
chsize(iFile,lNewlength);   //增加文件test.dat的长度,原文件末尾多出来的lSub个字节会自动
                              以'\0'填充
for(i=0;i<lFileSub;i++)
{
    lseek(iFile,-i-lSub,SEEK_END);
    read(&temp,sizeof(char),1,iFile);
    lseek(iFile,-i,SEEK_END);
    write(&temp,sizeof(char),1,iFile);
}                           //移动末尾的字节块。本来想一次过用malloc移动整块字节块的,但
                               想到楼主文件可能很大,不一定能分配到足够的内存,所以还是一
                              个一个字节地移动。
lseek(iFile,100l,SEEK_SET);
write(string,sizeof(char),strlen(string)+1,iFile);
close(iFile);

论坛徽章:
0
10 [报告]
发表于 2005-07-22 08:54 |只看该作者

数据增加/修改/删除过后保存文件函数怎么写

mmap我没有用过?用起来方便不?
chsize()这个函数我不知道gcc里面有没有这个东东
有哪位大虾能说说看用哪一种方法最好呢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP