文件操作

文件操作
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);
}

你可能感兴趣的:(文件操作)