// 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);//练习3
void AddToFile(char *filename);//练习4、键盘输入4个学生数据,存入到文件
//练习5
bool 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':
//练习2
printf("输入一串字符,以#结尾");
PrintToFile("test2.txt");
printf("操作成功,数据已存入test2.txt中\n");
break;
case '3':
//练习3
test3("fp1.txt","fp2.txt","fp3.txt");
printf("操作成功,fp1.txt与fp2.txt数据存入到fp3.txt中\n");
break;
case '4':
//练习4
AddToFile("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);
}
//练习5
bool 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;
}
}
文件操作
最新推荐文章于 2022-02-01 13:06:40 发布