C语言,更改指定位置数据文件内容,求大神

 我来答
罏ok3355ok
2017-07-17 · TA获得超过147个赞
知道答主
回答量:217
采纳率:0%
帮助的人:55.8万
展开全部

你这里的student是结构体吧,这里使用open打开文件:

void fun(student *stu,char *f_name,int id)
{
int i = 0;int j = 0;
int fd;
fd = open(f_name, O_RDWR);
for(i = 0;i<N ;i++)
{
read(fd, stu, sizeof(student));
if((stu->id) == id)
{
(stu->grade1) = (stu->grade1)+3.0;
(stu->grade2) = (stu->grade2)+3.0;
(stu->grade3) = (stu->grade3)+3.0;
//下列fprintf函数,感觉这里这么写不对,该怎么样写??????

lseek(fd, -sizeof(student), SEEK_CUR);
write(fd, stu, sizeof(student));
}

}
close(fd);
}

 方法就是:使用read每次读取一个student结构体,判断id是否相等,如果相等则重新赋值,文件偏移量后退sizeof(student)大小,写入新结构体即可。



read读文件时,文件偏移是随时更新的,所以要从当前位置后退一个结构体大小。


lseek的用法:
off_t lseek(int handle, off_t offset, int fromwhere);

handel:文件描述符,open的返回值

offset:偏移大小,正数向后偏移,负数向前偏移
fromwhere:偏移的起始点,系统变量:SEEK_CUR(当前)、SEEK_SET(文件头)、SEEK_END(文件尾)


当然用fseek也可以,这里我就不写了,对应的是:
fopen、fread、fwrite、fseek

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式