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

TseNing 2015-04-25 02:04:08
在一个已经存在并且有多条记录的二进制文件中,怎么使用C中的文件操作函数或者其他指令删除一条指定的记录。其中记录以数组形式存在,(可以以学生信息为例)。
如果用"rb+"模式打开文件,然后把要删除的记录之外的其他记录重新写入文件的话 由于少了一条记录,所以最后一条记录的内存实际上是没有被操作的,有没有办法删除掉这块儿内存呢?
...全文
882 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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+”模式,这样原文件已有的数据会被删除。然后重新开始添加记录
notepad--v3.4 windows Notepad--v3.4.0-plugin-Installer.exe 是win10下面的插件版安装包,会关联右键菜单等。 Notepad--v3.4.0-win10-portable.zip 是绿色免安装版本,解压即用,不会关联右键菜单注册表。 Ndd-quick-v3.3.0-win10-single-portable.zip 是单文件绿色免安装版,只包含皮肤和vc依赖库,不含插件、不含文件对比,主推轻量级、快速反应。适合只需要纯粹、轻快级,文本编辑器的用户。不定期发布。 MacOS 版本 Notepad--v3.4.0-mac_x64_12.3.dmg 是macos 12.x 及以后的版本。 Notepad--v3.4.0-mac_arm64_12.3.dmg 是macos 12.x 及以后 arm64 m1/m2芯片 的版本。第一次安装时,需要在设置偏好里面,放开苹果的安装限制,才能正常识别,请自行放开设置一下。 如果还是有问题,参考帖子:#I8JTJN:macOS Sonoma 14.1.1安装提示已损坏:macOS Sonoma 14.1.1安装提示已损坏 uos com.hmja.notepad_3.4.0.0_amd64.deb 是x64 cpu架构的uos系统对应的ndd版本。 其余系统版本后续会发布。 3.4 修改如下: 1 支持文件标签拖入拖出到新窗口的效果。 2 windows下修改快捷键放开。 3 按行号切分大文件。 4 大文件打开时,在文件夹查找所在目录,macos下可能会崩溃问题。 5 目录右键增加删除文件文件夹功能。 6 补充深色主题下rust语法高亮; lisp 语法失效问题。 7 linux下信号打开文件,不拿锁,打开文件在消息队列去做。

70,020

社区成员

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

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