- 论坛徽章:
- 0
|
数据增加/修改/删除过后保存文件函数怎么写
下面是我回答别人提出的类似问题的贴子,里面使用的操作适合你的需求,梢未修改一下就得:
楼主的需求是可以做到的,只不过有一点点麻烦而已。假设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); |
|