File.cpp函数定义文件:
#include<stdlib.h>
#include<stdio.h>
#include"File_Head.h"
int studentnum=2;
student stud[SIZE];
void File_fputc_fgetc()
{
FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
ch=getchar();
ch=getchar();
while(ch!='#')
{
fputc(ch,fp);
putchar(ch);
ch=getchar();
}
putchar(10);
fclose(fp);
}
void File_Cpy()
{
FILE *in=NULL,*out=NULL;
char ch,infile[10],outfile[10];
printf("Enter the infile name:\n");
scanf("%s",infile);
printf("Enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)//若文件不存在不会新建。。。
{
printf("cannot open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)//若文件不存在,则新建一个。。。
{
printf("cannot open outfile\n");
exit(0);
}
// while((ch=fgetc(in))!=EOF)//这个文件拷贝貌似好一点
// fputc(ch,out);
while(!feof(in))//用foef函数拷贝过来的文件末尾会多,ASC码值为-1.(事实上ASC码不可能等于-1)。。P336说明了feof更加优越不知道这里是怎么回事。。。
{
ch=fgetc(in);
fputc(ch,out);
putchar(ch);
}
fclose(in);
fclose(out);
}
//如果文件已二进制方式打开,fwrite和fread可以读写任何类型的信息
void File_write_read()
{
FILE *fp;
int i;
if((fp=fopen("stu_list","wb"))==NULL)//wb以二进制方式写入文件
{
printf("cannot open file\n");
exit(0);
}
printf("enter number:\n");
scanf("%d",&studentnum);
printf("Enter students Imfor:\n");
for(i=0;i<studentnum;i++)//这里输入的时候是以ASC码的形式存入内存的,也就是已文本形式存入内存
{
scanf("%s %d %d %s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
}
for(i=0;i<studentnum;i++)
{
if(fwrite(&stud[i],sizeof(student),1,fp)!=1)//向fp所指向的文件以二进制的形式写入sizeof(student)大小的内容,内容为地址stud[i]
printf("file write error\n");
}
// rewind(fp);
fclose(fp);
fp=fopen("stu_list","rb");
for(i=0;i<studentnum;i++)
{
fread(&stud[i],sizeof(student),1,fp);//从fp所指向的文件中以二进制的形式读出sizeof(student)大小的字节数,将起放入stud[i]中
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
//已ASC码的形式输出。。
}
fclose(fp);
}
void load()
{
FILE *fp;
int i;
if((fp=fopen("stu_dat","rb"))==NULL)
{
printf("cannot open infile\n");
return;
}
for(i=0;i<studentnum;i++)
{
if(fread(&stud[i],sizeof(student),1,fp)!=1)
{
if(feof(fp))
{
fclose(fp);
return;
}
}
}
printf("file read error\n");
fclose(fp);
}
void File_fseek()
{
int i;
FILE *fp=NULL;
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
for(i=0;i<10;i+=2)
{
fseek(fp,i*sizeof(student),0);//位置指针重置
fread(&stud[i],sizeof(student),1,fp);
printf("%s %d %d %s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
}
posted on 2010-11-01 22:25
jince 阅读(227)
评论(0) 编辑 收藏 引用