c语言实现文件数据删除视频,如何用c语言实现删除文件中指定的数据;例如

匿名用户

1级

2012-05-21 回答

你的描述不清晰,B1和B2两个结构数组,到底要删除哪个?B[2]是肯定不对的,这两个数组的长度都是2,下标只能是0和1,即B1[0], B1[1], B2[0], B2[1]。

你还是先把问题说清楚了,这个程序不难写。

追问:

不好意思漏掉了! 是要删除B2[1].name 和 B2[1].point

麻烦大侠指教!

追答:

还不是很清楚,文件里存了哪几条数据?数据在B1和B2里是如何存放的。以B2为例,B2[0]或B2[1],每个里存放一条数据还是用链表串起来的多条数据?

我按如下的假设实现:

文件中vip的数据以文本方式存储(假设文件名为vip.txt),每一条数据存一个会员姓名和会员积分信息,用空格分给,每条记录结束是一个回车符。数据读取出来之后放入B2[1]为头的链表中,然后将B2[1]代表的数据删除(即第一条记录),把其余部分的数据重新写入到文件中。

前面的定义略

main()

{

FILE *fp;

struct vip *ptr, buf;

fp = fopen("vip.txt", "r");

if(fp == NULL) {

printf("Can not open file vip.txt\n");

exit(-1);

}

ptr = NULL;

/* 读取vip.txt中的数据,存放在B2[1]为头的链表中 */

while(fscanf(fp, "%s %d", buf.name, &buf.point) != EOF) {

if(ptr = NULL)

ptr = &B2[1];

else {

ptr->next = (struct vip *)malloc(sizeof(struct vip));

ptr = ptr->next;

}

strcpy(ptr->name, buf.name);

ptr->point= buf.point;

ptr->next = NULL;

}

fclose(fp);

/* 将文件中的内容显示在屏幕上 */

ptr = &B2[1];

while(ptr) {

printf("%s %d\n", ptr->name, ptr->point);

ptr = ptr->next;

}

/* 删除B2[1]的内容 */

fp = fopen("vip.txt", "w"));

if(fp == NULL) {

printf("Can not write file vip.txt\n");

/* 释放列表中分配的内存空间,很简单,实现略 */

exit(-2);

}

/* 删除第一条记录,用第二条记录的值代替第一条 */

ptr = B2[1]->next;

if(ptr != NULL) {

strcpy(B2[1].name, ptr->name);

B2[1].point = ptr->point;

B2[1].next = ptr->next;

free(ptr);

}

/* 将新的链表保存到文件中 */

ptr = &B2[1];

while(ptr) {

fprintf(fp, "%s %d\n", ptr->name, ptr->point);

ptr = ptr->next;

}

fclose(fp);

/* 释放分配的内存,实现略 */

}