文件操作

来源:互联网 发布:青年文明号 网络歌手 编辑:程序博客网 时间:2024/05/17 00:10
// ttt.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct FileHead{double iVersion;char AuthorName[20];long fileLength;long HeadLength;}FileHead;typedef struct _student{char szname[10];bool sex;double score;}Stu;typedef struct STU {int m_Num;float m_Score;}STU;typedef struct PNODE{STU st;struct PNODE *next;}SNode,*LPNODE;bool FileCpy(const char *file1,char *file2);//练习6、文件复制,从file1中copy到file2中void CrateFile(char *filename);//加入文件头的方式创建一个文件void DataToFile(char *filename);//练习1、把data写入文件中  void PrintToFile(char *filename);//练习2、把输入的字符串存入到文件中void test3(const char *file1,const char *file2,char *file3);//练习3void AddToFile(char *filename);//练习4、键盘输入4个学生数据,存入到文件//练习5bool  SaveToFile(LPNODE h,const char* fileName);bool  LoadFromFile(LPNODE h,const char* fileName);void InitNode(LPNODE h);void DestroyNode(LPNODE h);//释放整条链表void PrintNode(LPNODE h);void main(int argc, char* argv[]){char ch;while(true){//fflush(stdin);system("cls");printf("请选择...");printf("\n===================================");printf("\n1、练习1,把data写入文件中");printf("\n2、练习2、把输入的字符串存入到文件中");printf("\n3、练习3、将f1.txt、f2.txt中的数据存入f3.txt中");printf("\n4、练习4、键盘输入4个学生数据,存入到文件");printf("\n5、练习5、(1)把链表内容存入文件");printf("\n6、练习5、(2)把文件内容加载到链表中");printf("\n7、练习6、文件复制");printf("\n0、退出");printf("\n===================================\n");ch=getchar();switch(ch){case '1':FILE *fp;//////1、练习一DataToFile("test1.dat");printf("\n操作成功,数据已存入test1.dat中\n");//读出pc和stu的值fp=fopen("test1.dat","r");char pc2[12],stu2[32];fseek(fp,22,SEEK_SET);//22=2+10+(2*5)fgets(pc2,12,fp);fgets(stu2,32,fp);printf("获得pc是:%s\n获得stu是:%s\n",pc2,stu2);fclose(fp);break;case '2'://练习2printf("输入一串字符,以#结尾");PrintToFile("test2.txt");printf("操作成功,数据已存入test2.txt中\n");break;case '3'://练习3test3("fp1.txt","fp2.txt","fp3.txt");printf("操作成功,fp1.txt与fp2.txt数据存入到fp3.txt中\n");break;case '4'://练习4AddToFile("test4.txt");printf("操作成功,四个学生数据存入test4.txt中\n");break;case '5'://练习五LPNODE head;head=(LPNODE)malloc(sizeof(SNode));InitNode(head);SaveToFile(head,"text5.txt");//把链表内容存储到文件中printf("操作成功,链表内容存入到文件中text5.txt\n");DestroyNode(head);break;case '6':LPNODE pnew;pnew=(LPNODE)malloc(sizeof(SNode));LoadFromFile(pnew,"text5.txt");//把文件内容加载到链表中PrintNode(pnew);DestroyNode(pnew);break;case '7':FileCpy("tangwen.pdf","test6.pdf");printf("操作成功,tangwen.pdf的数据全部复制到test6.txt中\n");break;case '0':exit(0);break;default:printf("非法操作,请重新选择!\n");break;}printf("打回车键继续...");fflush(stdin);ch=getchar();}}bool FileCpy(const char *file1,char *file2){//文件复制,从file1中copy到file2中FILE *fp1,*fp2;fp1=fopen(file1,"rb");fp2=fopen(file2,"wb");if(!fp1 || !fp2)return false;char c[10]={0};while(!feof(fp1)){fread(c,1,sizeof(c),fp1);int n=fwrite(c,sizeof(c),1,fp2);//fputs(c,fp2);}fclose(fp1);fclose(fp2);return true;}void CrateFile(char *filename){//加入文件头的方式创建一个文件FILE *fp;if(!(fp=fopen(filename,"w+")))return;FileHead fh;strcpy(fh.AuthorName,"tangwen");fh.fileLength=1024;fh.iVersion=1.0;fh.HeadLength=sizeof(FileHead);fprintf(fp,"%f%s%ld%ld\n",fh.iVersion,fh.AuthorName,fh.fileLength,fh.HeadLength);fprintf(fp,"%-10s%-10s%-10s%-10s","1001","tangwen","yanzhou","changning");fclose(fp);}void DataToFile(char *filename){//练习1、把data写入文件中  FILE *fp;if(!(fp=fopen(filename,"wb")))return;char c='a';double d=12.3333;int ia[]={1,2,3,4,5};char *pc="hello world";Stu stu={"cjy",true,100.00};fprintf(fp,"%-2c%-10lf%-2d%-2d%-2d%-2d%-2d%-12s%-5s%-2d%-5.2f",c,d,ia[0],ia[1],ia[2],ia[3],ia[4],pc,stu.szname,stu.sex,stu.score);fclose(fp);}void PrintToFile(char *filename){//练习2、把输入的字符串存入到文件中FILE *fp;if(!(fp=fopen(filename,"w")))return;char ch;while((ch=getchar())!='#'){fputc(ch,fp);}fclose(fp);}void test3(const char *file1,const char *file2,char *file3)//练习3{//将两个存有字符串的文件f1.txt、f2.txt中的数据读出,输入到新文件f3.txt中存放FILE *fp1,*fp2,*fp3;fp1=fopen(file1,"r");fp2=fopen(file2,"r");fp3=fopen(file3,"w");if(!fp1 || !fp2 || !fp3)return;char buffer[64];int nCount=0;while(!feof(fp1)){fgets(buffer,64,fp1);fputs(buffer,fp3);}while(!feof(fp2)){fgets(buffer,64,fp2);fputs(buffer,fp3);}fclose(fp1);fclose(fp2);fclose(fp3);}void AddToFile(char *filename){//键盘输入4个学生数据,存入到文件FILE *fp;if(!(fp=fopen(filename,"w+")))return;STU stu2[4];fprintf(fp,"%-8s%-10s\n","学号","分数");for(int i=0;i<4;i++){printf("输入第%d个学生信息,学号,分数:",i+1);scanf("%d%f",&stu2[i].m_Num,&stu2[i].m_Score);fprintf(fp,"%-8d%-10.2f\n",stu2[i].m_Num,stu2[i].m_Score);}fclose(fp);}//练习5bool  SaveToFile(LPNODE h,const char* fileName){FILE *fp;if(!(fp=fopen(fileName,"a+"))){if(!(fp=fopen(fileName,"w+")))return false;}LPNODE p;p=h->next;if(p==NULL)return false;while(p!=NULL){fprintf(fp,"%-8d%-10.2f\n",p->st.m_Num,p->st.m_Score);p=p->next;}return true;}bool  LoadFromFile(LPNODE h,const char* fileName){FILE *fp;if(!(fp=fopen(fileName,"r")))return false;LPNODE p,pm;STU stu;char num[10],score[10];p=h;p->next=NULL;while(!feof(fp)){fscanf(fp,"%s%s",num,score);stu.m_Num=atoi(num);stu.m_Score=atof(score);pm=(LPNODE)malloc(sizeof(SNode));pm->st=stu;p->next=pm;p=pm;p->next=NULL;}return true;}void InitNode(LPNODE h){LPNODE p,pm;STU stu;p=h;p->next=NULL;printf("输入学生信息,以0结尾\n学号,成绩:");scanf("%d%f",&stu.m_Num,&stu.m_Score);while(stu.m_Num!=0){pm=(LPNODE)malloc(sizeof(SNode));pm->st=stu;p->next=pm;p=pm;p->next=NULL;printf("学号,成绩:");scanf("%d%f",&stu.m_Num,&stu.m_Score);}}void DestroyNode(LPNODE h)//释放整条链表{LPNODE p1,p2;p1=h;while(p1->next!=NULL){p2=p1->next;free(p1);p1=NULL;p1=p2;}free(p1);p1=NULL;}void PrintNode(LPNODE h){LPNODE p;p=h->next;while(p!=NULL){printf("%-8d%-10.2f\n",p->st.m_Num,p->st.m_Score);p=p->next;}}

原创粉丝点击