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

TseNing 2015-04-25 02:04:08
在一个已经存在并且有多条记录的二进制文件中,怎么使用C中的文件操作函数或者其他指令删除一条指定的记录。其中记录以数组形式存在,(可以以学生信息为例)。
如果用"rb+"模式打开文件,然后把要删除的记录之外的其他记录重新写入文件的话 由于少了一条记录,所以最后一条记录的内存实际上是没有被操作的,有没有办法删除掉这块儿内存呢?
...全文
908 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+”模式,这样原文件已有的数据会被删除。然后重新开始添加记录
操作系统是计算机系统的核心组件,主要负责管理硬件和软件资源,并为用户提供便捷的接口与服务。在本项目,我们通过C语言实现了一个基础的操作系统文件管理系统,这为学习操作系统工作原理提供了一个实践平台。文件管理系统是操作系统的重要组成部分,其核心任务包括文件的创建、删除、打开、关闭、读取、写入和保存等操作。在此模拟系统,用户需先登录,随后可执行多种文件管理操作文件创建:在C语言,fopen()函数可用于创建新文件。若文件已存在,该函数可根据指定模式进行追加或覆盖写入。完成文件创建后,需调用fclose()函数关闭文件,以确保数据正确写入磁盘。 文件删除文件删除通常通过调用remove()或unlink()函数实现,这些函数会从文件系统移除文件并释放空间。在真实操作系统文件删除可能涉及权限检查和垃圾回收机制。 文件打开与关闭:fopen()函数不仅用于创建文件,还可打开已存在的文件,它接受文件名和访问模式作为参数。而fclose()函数则用于结束文件操作并释放系统资源。 文件读取与写入:fread()和fwrite()函数用于读取和写入文件数据,fgets()和fprintf()则适用于处理字符串。在写入时需确保磁盘空间充足,读取时则需防止越界。 文件保存:在C语言文件保存通常隐含在文件操作。每次写入操作都会实时保存到磁盘,除非使用了缓冲机制。文件关闭时,缓冲区数据会自动写入磁盘。 打印当前文件:这可能指列出当前工作目录下的所有文件,可通过opendir()、readdir()和closedir()函数实现,遍历目录并显示文件信息。 文件调度:在操作系统文件调度涉及决定文件的处理优先级,可能涉及缓存策略和I/O调度算法。在本模拟系统文件调度简化为按请求顺序执行,未采用复杂的预读或写后策略。 通过这个基于C语言的文件管理系统,我们能够深入理解操作

70,040

社区成员

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

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