c语言-文件(1)

一.文件的类型:

        文本文件(也称ASCII文件):文本文件的每一个字节存放一个ASCII码, 代表一个字符

        二进制文件:数据按其在内存中的存储形式存放在磁盘上。

        例如:

                设有一整数65 它在内存中的存储形式:

                         字符 65在文本文件中的存储形式: 0011 0110 0011 0101

                         字符’6’ 的ASCII码值为54, 25+24+22+21 =54;0011 0110;

                         字符’5’ 的ASCII码值为53, 25+24+22+20 =53;0011 0101;      

                 

                        65在二进制文件中的存储形式:0000 0000 0100 00001

                        65=26+20=64+1;

二.文件类型指针:

        要使用一个文件需要有一定的信息 , 如文件当前的读写位置, 与文件对应的内存缓冲区地址, 文件的操作方式等。 这些信息都存放在“文件信息区”中 , “文件信息区”是一个结构体变量 , 其结构体类型由系统定义, 类型名为 FILE。

typedef struct
{  int level;                       /*缓冲区‘满’或‘空’的程度*/
    unsigned  flags;                /*文件状态标志*/
    char  fd;                       /*文件描述符*/
    unsigned char  hold;            /*如无缓冲区不读字符*/
    int  bsize;                     /*缓冲区的大小*/
    unsigned char  _FAR *buffer;    /*数据缓冲区的位置*/
    unsigned char  _FAR *curp;      /*指针,当前的指向*/
    unsigned  istemp;               /*临时文件,指示器*/
    short  token;                   /*用于有效性检查*/
}FILE;

定义文件类型指针变量:

                格式:  FILE    * 指针变量名 ;

                注意: 1. 只有通过文件指针变量才能调用相应的文件

                         2. 有n个文件就要定义n个文件指针变量,分别对应各个文件。

                         3. FILE必须大写

                使用文件的步骤:

                         1. 定义文件指针变量。

                         2. 打开文件, 并判断是否能正确打开文件,如果打开文件失败, 则退出程序。

                         3. 向文件写入数据, 或从文件读取数据 ,这是最重要的文件操作步骤。

                         4. 关闭文件。

例1  将字符’A’—’Z’写入文件保存起来
#include <stdio.h>
#include <stdlib.h>
int main( )
{  
    char ch;       
    FILE   *fp;                                    // 定义一个文件指针变量
    fp=fopen("letter.dat", "w");                   // 打开文件操作
    if (fp==NULL)                                  // 判断文件打开是否成功
    {  
         printf("Opening  file error! \n");       
         exit(0);  
    }
    for (ch='A'; ch<='Z'; ch++)                   
         fputc(ch, fp);                            // 将字符ch写入到文件中
    fclose(fp);                                    // 关闭文件
    return 0;
}

三.文件的打开与关闭:

        fopen函数

        函数原型:FILE   *fopen(char *filename, char  *mode);  

        函数的返回值是一个地址, 即被打开文件所对应的“文件信息区”的起始地址, 使用时应将返回值赋给一个文件指针变量。 

         例:

                FILE   *fp ;      

                fp = fopen ( “file1.txt” , “r” ) ; 

                        fp--让文件指针变量 指向被打开的文件;

                        file1.txt--需要打开的文件名;

                        r--使用文件的方式(只读);

     

文件的打开:

       打开文件的方法

       打开文件时 , 因使用方式不对或其他原因, 可能会使打开文件操作失败 , 这时fopen函数的返回值是NULL, 所以在打开文件时通常会判断一下打开操作是否成功。

 if ( ( fp = fopen(“file1.txt”, “r”) ) = = NULL )
 {  
     printf(“Can not open this file!\n”);
     exit( 0 );
 }
 注意:“!=”优先级高于“=” 所以为确保先算fp = fopen(“file1.txt”, “r”) 应当加上括号使之变为
      ( fp = fopen(“file1.txt”, “r”) )以减少出错(以防万一,都加上括号无论等不等)
        
      file1.txt 存放在当前程序所在的目录下。

        如果文件不在当前目录下,应写出文件的路径:

if ( ( fp = fopen(“e:\\data\\file2.txt”, “r”) ) = = NULL )
{  
    printf(“Can not open this file!\n”);    
    exit( 0 );  
}
    注:文件在e:\data目录下(data文件夹已存在)
        在双引号中用2个斜杠表示1个斜杠(第一个斜杠表示转义)

文件的使用方式

        (1)  “r”与“rb”:  只读“r”打开一个文本文件, “rb”打开一个二进制文件以此方式打开文件,该文件必须已经存在, 如不存在将出错打开文件后只能从文件中读数据, 当前读写位置位于文件开头

        2)  “w”与“wb”:  只写“w”打开一个文本文件, “wb”打开一个二进制文件新建一个文件。 打开文件后只能向文件中写数据, 当前读写位置位于文件开头

        3)  “a”与“ab”:  追加以此方式打开文件时, 如文件已存在, 则将当前写位置位于文件末尾,可以追加数据; 如文件不存在, 则建立一个新文件

        (4)  “r+”与“rb+”:  “+”表示即能读又能写, 用“r+”或“rb+”方式打开文件时, 文件必须已经存在,否则将出错

        (5) “w+”与“wb+”:  以读/写方式打开文件, 建立一个新文件(如文件已存在, 则将原文件覆盖

        (6)  “a+”与“ab+”:  以读/写方式打开文件, 如文件已存在,  可在文件末尾追加数据; 如文件不存在, 则建立一个新文件

        说明: 以“a+”或“ab+” 打开已经存在的文件,若打开文件后直接写数据, 则新数据添加在文件的末尾;若打开文件后直接进行读数据, 则是从文件开头读取数据

文件的关闭:

        fclose函数:

        函数原型:(使用格式:   fclose (文件指针变量);

                             int   *fclose(FILE  *fp);

        函数的返回值是一个整数, 关闭成功返回0出错返回非0值。

        fclose函数的作用:

        将文件指针变量所指向的文件关闭,即使文件指针变量不再指向该文件,以后不能通过文件指针变量对该文件进行操作 

        注:  不论用什么方式打开文件,关闭文件的方法都一样。

四.文件的字符读写函数:

        单字符的写入函数:

                函数原型:int  fputc(int  ch, FILE  *fp);

                ch:字符常量或变量;     *fp:文件指针变量;

                函数功能:将字符ch写入fp指向的文件中。

                函数返回值:成功时返回该字符, 失败时返回 EOF(-1)。

                说明: 写入一个字符后, 文件位置指针将自动指向下一个字节。

例2 从键盘输入一行字符, 写到文本文件string.txt中 
#include <stdio.h>
#include <stdlib.h>
int main( )
{  
    FILE  *fp;
    char ch;
    if( (fp=fopen("string.txt", "w") )==NULL) 
    {  
        printf("can't open file\n");    
        exit(0);  
    }
    do
    {   
        ch=getchar( );      //从键盘输入一个字符
        fputc(ch, fp);       //将ch中的字符写到文件中
    }while(ch!='\n'); 
    fclose(fp);  
    return 0;
 } 
例3 将一个文本文件的内容复制到另一个文件中
int  main( )
{  
   FILE  *fp_in, *fp_out;
   char  ch, infile[20], outfile[20];
   scanf("%s",  infile);    
   scanf("%s", outfile);  
   if((fp_in=fopen( infile, "r"))==NULL) 
   {
      printf("can't open file:%s", infile);
      exit(0);
   }
   if((fp_out=fopen( outfile, "w"))==NULL) 
   {  
      printf("can't open file:%s", outfile); 
      exit(0);
   }
   while( !feof(fp_in) )        //feof函数检查文件是否结束,结束返回非零值,否则返回零 
   {    
      ch= fgetc(fp_in);         //该处还可直接写为fputc( fgetc(fp_in), fp_out); 
      fputc(ch, fp_out);        /*循环也可以写为while( (ch=fgetc(fp_in))!=EOF ) 
                                   fputc(ch, fp_out);*/
   }    
   fclose(fp_in);        
   fclose(fp_out);
   return 0;
}

         

声明:本文章内容主要来自于课堂课件,在下只是进行总结(仅占小部分,嘿嘿),相当于一次课堂笔记(这样有助于提高自己的能力),希望各位大佬们多多包涵不吝赐教,谢谢大家能看完我拙略的排版以及有些乱的注释,我今后会好好努力改正的,加油!冲冲冲!干就完了!

特别感谢我的好兄弟们对我的关注和点赞,nice!

                

                                 

                        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值