怎么用C中的文件操作函数删除一部分数据?

TseNing 2015-04-25 02:04:08
在一个已经存在并且有多条记录的二进制文件中,怎么使用C中的文件操作函数或者其他指令删除一条指定的记录。其中记录以数组形式存在,(可以以学生信息为例)。
如果用"rb+"模式打开文件,然后把要删除的记录之外的其他记录重新写入文件的话 由于少了一条记录,所以最后一条记录的内存实际上是没有被操作的,有没有办法删除掉这块儿内存呢?
...全文
827 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-04-27
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
苏叔叔 2015-04-25
  • 打赏
  • 举报
回复
仅供参考:

/*1.dat
Tom 15 98.3
Jim 14 99.5
Lyli 15 89.0
David 15 80.8
*/
int main(void)
{
	FILE *f, *nf;
	if (NULL == (f = fopen("1.dat", "rb")))
	{
		fprintf(stderr, "Can not open file 1.dat");
		return 1;
	}
	if (NULL == (nf = fopen("11.dat", "wb")))
	{
		fprintf(stderr, "Can not create file 11.dat");
		fclose(f);
		return 1;
	}
	char name[20];
	char Name[20];
	int year;
	double grade;
	int r;
	printf("input the delete name string:");
	scanf("%20s", name);
	while (1)
	{
		r = fscanf(f, "%s%d%lf\n", Name, &year, &grade);
		if (3 == r)
		{
			if (strcmp(name, Name) == 0) continue;
			fprintf(nf, "%s %d %lg\n", Name, year, grade);
		}
		else break;
	}
	fclose(f);
	fclose(nf);
	return 0;
}
TseNing 2015-04-25
  • 打赏
  • 举报
回复
OK 解决了 可以在重新写入数据的时候换成“wb+”模式,这样原文件已有的数据会被删除。然后重新开始添加记录

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧