C语言写入文件,文件操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言写入文件,文件操作相关的知识,希望对你有一定的参考价值。

比如:如果像一个文件中写入一个人的信息,包括ID,Name,年龄等三个。
如果要实现当用户输入一个人的信息时,此ID已经存在,则提示“此人信息已存在”。
另外,输入ID后怎么实现查询功能。希望能够有个简单的代码。十分感谢!
我觉得:当用户输入一个信息时,不管是添加还是查询,必须要把原来的所有信息ID和当前输入的信息ID对比,相同则输出这一组的信息,不相同则提示“无此人信息”。就是不知道怎么用代码表示出来。

还有达人吗?

struct student

int ID;
char name[10];
int age;
stu[50];//首先定义结构体
//之后就是文件的读写操作了,这里是我程序的一部分,结构体不一样,其他操作都一样,比如你这里有3个成员scanf就输入3个就行
void AddStuInfo()//添加学生信息,完成


printf("\ninput score of student :\n");
printf("-------------------------------------------\n");
printf("NO. NAME SCORE1 SCORE2\n");
printf("-------------------------------------------\n");

scanf("%d %s %d %d %d",&s.Num,s.Name,&s.score[0],&s.score[1]);
s.ave = (s.score[0]+s.score[1])/2;

//从文件读数据 得 i大小
FILE *fp;

if((fp = fopen("student_info.txt","r")) == NULL)printf("can't open file");exit(0);
for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp)!=0;i++)

printf("\n%4d %-8s %4d %4d %4d\n",stu[i].Num,stu[i].Name,
stu[i].score[0],stu[i].score[1],stu[i].ave);


fclose(fp);
int n = i;
fp = fopen("student_info.txt","w");
for(int i = 0;i<n;i++)
fwrite(&stu[i],sizeof(struct student_info),1,fp);
// fseek( fp, 0, SEEK_END);

if(fwrite(&s,sizeof(struct student_info),1,fp) != 1)

printf("file write error!");
exit (0);

fclose(fp);



void ShowStuInfo()//显示学生信息,完成

FILE *fp1;

fp1 = fopen("student_info.txt","r");
printf("\ninput score of student :\n");
printf("-------------------------------------------\n");
printf("NO. NAME SCORE1 SCORE2 AVE\n");
printf("-------------------------------------------\n");
for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp1)!=0;i++)

if(stu[i].Num!=0)
printf("\n%4d %-8s %4d %4d %4d\n",stu[i].Num,stu[i].Name,
stu[i].score[0],stu[i].score[1],stu[i].ave);//类型不匹配的错误


fclose(fp1);
参考技术A //1楼回答的太多了

//看我的

#include<stdio.h>
#include <string.h>
main()

int flag=0;
FILE *fp;
char *p,strline[100]="\0",strinfo[100]="\0";
fp=fopen("data.txt","r");
puts("Please input ID");
gets(strinfo); //获取用户输入的ID
while (fgets(strline,99,fp)) //循环读每行用户信息

if ((p=strstr(strline,strinfo))!=NULL) //用strstr函数检查是否用户信息中有用户输入的ID

flag=1;
puts("此人信息已存在"); //提示存在


if (flag==0)

puts("无此人信息");

本回答被提问者采纳

vhd怎么写入数据

参考技术A

汇编写入工具(虚拟磁盘写入工具)类似于现实中计算机内部的一块硬盘,虚拟硬盘文件则是在虚拟机下模拟物理硬盘。你可以利用汇编写入工具吧你的汇编程序放进虚拟硬盘,在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。 用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器。


拓展知识:虚拟硬盘顾名思义它并不是一块真实的物理磁盘,并不需要我们增加额外的成本去购买,它仅仅是从一块物理磁盘分区中虚拟出来的一个磁盘,可以像物理磁盘一样进行分区、格式化、设置配额等等操作。虚拟机的出现让虚拟硬盘有了更广阔的用武之地,由于虚拟机种类烦多,它们所支持的格式也有所不同,如:VMware支持的是vmdk格式,Virtual box支持的是vdi格式,VPC、Hyper-V支持的是VHD格式。

微软的VHD格式虚拟硬盘是一种公共可用映像格式规范,用于指定封装在单个文件中的虚拟硬盘,它能够在承载本机文件系统的同时支持标准的磁盘和文件操作。随着Windows7和Windows2008 R2的出现,VHD格式的虚拟硬盘已经运用到了真实的系统中,给我们的磁盘运用带来诸多的便利,下面是我总结出来的VHD十大优点。

1、轻松创建VHD

在Windows7中我们可以通过磁盘管理器按照向导轻松创建VHD,也可以通过diskpart工具快速地创建VHD(如下图)。在Windows2008 R2中则必须先安装Hyper-V后才能按下面的方式创建VHD,不过你也同样可以使-用HyperV来创建。(具体操作请参照《 我的硬盘我作主》)



2、VHD文件类型较多

VHD虚拟硬盘有固定VHD、动态VHD 和差异VHD三种类型,我们可以根据自己的实际需求去选择相应的格式,但在Windows7中只有固定VHD和动态VHD两种类型。固定VHD对已分配的大小不会更改。动态VHD的大小与写入的数据大小相同,并随着数据的写入而相应增加直到达到大小上限。差异 VHD 与动态VHD 类似,但只包含所关联父VHD修改后的磁盘块。


3、维护简单

VHD磁盘操作时就跟物理磁盘一样,维护起来较为简单,我们可以对它进行分区、格式化、压缩、删除等等操作,这些操作并不影响物理分区。这种操作更有利于初学者反复试验分区、格式等功能。


4、像U盘一样加载自如

当你对VHD分区写入一些重要数据后,并不想他人修改其中的内容时,我们可以随时将此VHD进行脱机或分离操作,在需要的时侯再将它附加进来修改。同样可以向U盘一样从“安全删除硬件并弹出媒体”中弹出某个VHD。



5、轻松备份

备份时我们仅仅需要将创建的VHD文件进行备份,它所包含的分区中所内容便被统一备份,当然我们也可以用备份工具将VHD文件所在的整个物理分区进行备份,这样不用说VHD分区中的内容也被纳入其中了。(其实Windows7和Windows2008的Backup工具备份产生的主文件也是VHD格式)


6、迁移方便

当我们有一个VHD文件需要在多台计算机上使用时,我们只要先将此VHD分离开来,将其复制到目的计算机上,再进行附加上去即可。同时我们可以通过服务器进行分发,使用脚本将其附加到目的机。当然在物理机与虚拟机之间迁移也是没问题的。


7、与虚拟机互相通用

Windows7和Windows2008 R2的VHD文件与VPC、Hyper-V的虚拟硬盘是互通的,我们可以将虚拟机中的VHD文件附加到Windows7和Windows2008 R2中。反过来Windows7和Windows2008 R2中的VHD在分离后也可以挂载到VPC和Hyper-V中。



8、可直接用于系统部署

我们可以使用Imagex工具将已经捕获的映像释放到此放,或通过WDS服务器部署系统到VHD。


9、本机启动VHD

在 Windows 7 和 Windows Server 2008 R2 中,可以配置 VHD 进行本机启动。这表示 VHD 可用作指定硬件上的运行操作系统,而不需要父操作系统、虚拟机或虚拟机监控程序。此外,如果使用本机启动,则会拥有对物理计算机上所有设备和文件系统卷(包括 VHD 内的卷)的完全访问权限。相反,在虚拟机中运行 Windows 时,虚拟磁盘中只有一个文件系统卷(卷 C:)可用于来宾计算机(除非将另一卷共享到虚拟机)。

请参考《 如何从VHD虚拟硬盘引导Windows 7 》和《 使用Windows 7 VHD Boot启动计算机 》

10、双重的安全保护

由于VHD创建时产生的是一个存储文件,在这里我们便可以对此文件和VHD的分区进行不同的权限限制,这样即可以对分区读写权限进行设置保证部分人员有往VHD分区中存储数据的权限,也可以对此VHD文件设置读写权限保证此文件在分离后不被他人给删除。

————————————————

版权声明:本文为CSDN博主「weixin_34344403」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_34344403/article/details/85145481

以上是关于C语言写入文件,文件操作的主要内容,如果未能解决你的问题,请参考以下文章

c语言怎么二进制文件操作?

c语言如何进行二进制文件的操作?

C 语言文件操作 ( fflush 函数 | 刷新缓冲区示例代码 )

C语言怎样对文件进行操作

c语言写入文件方法

C语言文件操作问题