码迷,mamicode.com
首页 > 其他好文 > 详细

FILE 相关

时间:2016-04-07 18:57:36      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:file

一、FILE结构体:

 #include<stdio.h>

#ifndef _FILE_DEFINED
struct _iobuf
{
         char *_ptr;               //文件输入的下一个位置
         int   _cnt;               //当前缓冲区的相对位置
         char *_base;              //指基础位置(文件的起始位置)
         int   _flag;              //文件标志
         int   _file;              //文件的有效性验证
         int   _charbuf;           //检查缓冲区状况,如果无缓冲区则不读取
         int   _bufsiz;            //文件的大小
         char  *_tmpfname;         //临时文件名
};
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

    文件指针:通常用一个指针变量指向一个文件,这个指针变量即称为文件指针。

    定义的一般形式:    FILE *指针变量标识符;   

        例:FILE *fp;  // fp:指向文件的文件指针 

二、文件的 打开

1.读写文件之前需要进行文件打开(fopen()的调用)

     FILE *fp=fopen((被打开的)文件名,使用文件方式(文件类型和操作要求));

     例:

     FILE *fp1,*fp2;

     fp1=fopen("file","r");

     fp2=fopen("c:\\file","rb");

2.文件使用方式

     1)以字符为标志:

    • r(read)        只读---打开文件(必须存在),只能进行读取。

    • w(write)       只写---创建文件,以进行写入。如果文件已经存在,则删除当前内容。

    • a(append)      追加---追加,打开或创建文件以在文件尾部写入。

    • r+               打开文件以进行更新(读取和写入)。

    • w+               创建文件以进行更新。如果文件已经存在,则删除当前内容。

    • a+               追加,打开或者创建文件以进行更新,在文件尾部写入。


    • t(text)        文本文件,可省略不写(默认)

    • b(banary)      二进制文件

    • +                读和写


     2)使用情况:

  • 打开文件时,若出错,fopen()返回NULL。

if(fp == fopen("c:\\file","r"))
{
     printf("\nerror on open c:\\file!");
     exit(1);
}
  • 将文本文件读入内存,需将ASCII码转换为二进制;反之,将文件以文本方式存入外存储器,将二进制转换为ASCII码。(文本文件读写花费时间较长,二二进制文件读写不存在这种转换)

  • 系统可直接打开及直接使用:标准输入文件、标准输出文件、标准出错输出,定义指针stdin、stdout、stderr分别指向它们(它们的_file描述符分别是0、1和2),因而终端输入输出不许打开终端文件。

三、文件的 关闭

    文件使用完毕需进行关闭(fclose()的调用)

       fclose(文件指针);     例: fclose(fp);

四、文件的 读写

1、字符读写函数  -------【读写一个字符】

     fgetc()  ---  字符变量=fgetc(文件指针);   其文件必须含有 “读” 权限;可连续多次使用,都区多个字符。

               例: ch=fgetc(fp);

     fputc()  ---  fputc(字符表达式,文件指针);   其文件必须含有 “写、追加 权限; 输入成功则返回写入字符,否则返回EOF。

               例:fputc(‘a‘,fp);

2.字符串读写函数 ------- 【读写字符串】

     fgets(字符数组,n,文件指针);  //从文件中读取长度为 n-1 的字符串并存入到字符数组中,读入完后,最后自动加上“\0”.    -------- 读字符串函数

           若过程中遇到“换行”或“EOF”,则提前结束;成功则返回值为字符数组的首地址;否则,返回NULL。

               例: fgets(str,n,fp);

      fputs(字符串,文件指针);  //向指定的文件中写入一个给定的字符串;

           字符串末尾的“\0”不写入文件; 成功返回值为0,否则,返回值非零。

3.数据块读写函数 ------- 【读写数据块】

     fread(buffer,size,count,fp);

     fwrite(buffer,size,count,fp);

注释:buffer:指针,表示存放读入数据的首地址(fread());表示存放要写入文件的数据的首地址(fwrite());

          size:数据块的字节数

          count:要读写的数据块块数

     每执行一次操作,文件内部的位置指针自动向后移一位。

     成功则返回count的值(读写数据块的数目),否则返回0。

          例:

     fread(array,4,8,fp); //读入8个实数存放到array中

     fwrite(array,4,8,fp); //将前8个实数依次写入fp指向的文件中

五、格式化读写函数 ----【 磁盘文件】

     fscanf(文件指针,格式字符串,输入列表);

     fprintf(文件指针,格式字符串,输出列表 );   

函数fscanf和函数scanf等价看,只是fscanf接收将从中读取数据的文件指针作为参数。

函数fprintf和printf等价,只是fprintf还需要一个指向文件的指针,所有数据都写入到这个文件中。

六、随机读写

1、文件定位

  •  rewind(文件指针);  //将文件内部的位置指针移到文件开始位置

  •  fseek(文件指针,位移量,起始点);   //移动文件内部的位置指针到指定的位置  ( 用于二进制文件;成功时,返回文件位置指针的当前值;出错时,返回-1)

 起始点           符号名          数字表示   

SEEK_SET  ----  文件的开头    ----   0

SEEKCUR   ----  文件的当前位  ----   1

SEEK_END  ----  文件的结尾    ----   2

  • ftell(文件指针);   // 返回文件位置指针的当前值(从文件头开始算起的字节数,返回为长整形数,若出错为-1)

2、文件的随机读写

     移动文件的位置指针后,调用顺序读写函数完成读写,从而达到随机读写的目的。

本文出自 “花开彼岸” 博客,请务必保留此出处http://zxtong.blog.51cto.com/10697148/1761225

FILE 相关

标签:file

原文地址:http://zxtong.blog.51cto.com/10697148/1761225

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!