转C文件操纵函数总结

   1.文件的打开fopen()

     文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。当使用打开函数时,必须给出文件名、文件操作方式(读、写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头。若已有一个同名文件存在,则删除该文件,若无同名文件,则建立该文件,并将文件指针指向文件开头。

    fopen(char *filename,char *type);

    其中*filename是要打开文件的文件名指针,一般用双引号括起来的文件名表示,也可使用双反斜杠隔开的路径名。而*type参数表示了对打开文件的操作方式。其可采用的操作方式如下:

              方式                      含义

               "r"             打开,只读

               "w"             打开,文件指针指到头,只写

               "a"             打开,指向文件尾,在已存在文件中追加

               "rb"            打开一个二进制文件,只读

               "wb"            打开一个二进制文件,只写

               "ab"            打开一个二进制文件,进行追加

               "r+"            以读/写方式打开一个已存在的文件

               "w+"            以读/写方式建立一个新的文本文件

               "a+"            以读/写方式打开一个文件文件进行追加

               "rb+"           以读/写方式打开一个二进制文件

               "wb+"           以读/写方式建立一个新的二进制文件

               "ab+"           以读/写方式打开一个二进制文件进行追加

    当用fopen(0成功的打开一个文件时,该函数将返回一个FILE指针,如果文件打开失败,将返回一个NULL指针。如想打开test文件,进行写:

              FILE *fp;

              if((fp=fopen("test","w"))==NULL)

              {

                  printf("File cannot be    opened\n");

                  exit();

              }

              else 

                  printf("File opened for writing\n");

                    ……

              fclose(fp);

     DOS操作系统对同时打开的文件数目是有限制的,缺省值为5,可以通过修改CONFIG.SYS文件改变这个设置。

 2.关闭文件函数fclose()

    文件操作完成后,必须要用fclose()函数进行关闭,这是因为对打开的文件进行写入时,若文件缓冲区的空间未被写入的内容填满,这些内容不会写到打开的文件中去而丢失。只有对打开的文件进行关闭操作时,停留在文件缓冲区的内容才能写到该文件中去,从而使文件完整。再者一旦关闭了文件,该文件对应的FILE结构将被释放,从而使关闭的文件得到保护,因为这时对该文件的存取操作将不会进行。文件的关闭也意味着释放了该文件的缓冲区。

       int fclose(FILE *stream);

    它表示该函数将关闭FILE指针对应的文件,并返回一个整数值。若成功地关闭了文件,则返回一个0值,否则返回一个非0值。常用以下方法进行测试:

              if(fclose(fp)!=0)

              {

                  printf("File cannot be closed\n");

                  exit(1);

              }

              else

                  printf("File is now closed\n");

    当打开多个文件进行操作,而又要同时关闭时,可采用fcloseall()函数,它将关闭所有在程序中打开的文件。

              int fcloseall();

该函数将关闭所有已打开的文件,将各文件缓冲区未装满的内容写到相应的文件中去,接着释放这些缓冲区,并返回关闭文件的数目。如关闭了4个文件,则当执行:n=fcloseall();          时,n应为4

3.文件的读写 

  (1).读写文件中字符的函数(一次只读写文件中的一个字符)

              int fgetc(FILE *stream);

              int fgetchar(void);

              int fputc(int ch,FILE *stream);

              int fputchar(int ch);

              int getc(FILE *stream);

              int putc(int ch,FILE *stream);

    其中fgetc()函数将把由流指针指向的文件中的一个字符读出,例如:

              ch=fgetc(fp);

    将把流指针fp指向的文件中的一个字符读出,并赋给ch,当执行fgetc()函数时,若当时文件指针指到文件尾,即遇到文件结束标志EOF(其对应值为-1),该函数返回一个-1ch,在程序中常用检查该函数返回值是否为-1来判断是否已读到文件尾,从而决定是否继续。

              #include "stdio.h"

              main()

              {

                  FILE *fp;

                  ch ch;

                  if((fp=fopen("myfile.tex","r"))==NULL)

                  {

                      printf("file cannot be opened\n");

                      exit(1);

                  }

                  while((ch=fgetc(fp))!=EOF) fputc(ch,stdout);

                  fclose(fp);

              } 

                

    该程序以只读方式打开myfile.txt文件,在执行while循环时,文件指针每循环一次后移一个字符位置。用fgetc()函数将文件指针指定的字符读到ch变量中,然后用fputc()函数在屏幕上显示,当读到文件结束标志EOF时,变关闭该文件。

   上面的程序用到了fputc()函数,该函数将字符变量ch的值写到流指针指定的文件中去,由于流指针用的是标准输出(显示器)FILE指针stdout,故读出的字符将在显示器上显示。又比如:  fputc(ch,fp);  该函数执行结构,将把ch表示的字符送到流指针fp指向的文件中去。

(2).读写文件中字符串的函数          

              char *fgets(char *string,int n,FILE *stream);

              char *gets(char *s);

              int fprintf(FILE *stream,char *format,variable-list);

              int fputs(char *string,FILE *stream);

              int fscanf(FILE *stream,char *format,variable-list);

    其中fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针stream指向的字符数组中去,例如:

              fgets(buffer,9,fp);

    将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。

    注意,fgets()函数读到'\n'就停止,而不管是否达到数目要求。同时在读取字符串的最后加上'\0'

    fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以长用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错,例如下面的程序用fgets()函数读test.txt文件中的第一行并显示出来:           

              #include "stdio.h"

              main()

              {

                  FILE *fp;

                  char str[128];

                  if((fp=fopen("test.txt","r"))==NULL)

                  {

                      printf("cannot open file\n");

                      exit(1);

                  }

                  while(!feof(fp))

                  {

                      if(fgets(str,128,fp)!=NULL) printf("%s",str);

                  }

                  fclose(fp);

              }

    gets()函数执行时,只要未遇到换行符或文件结束标志,将一直读下去。因此读到什么时候为止,需要用户进行控制,否则可能造成存储区的溢出。

    fputs()函数想指定文件写入一个由string指向的字符串,'\0'不写入文件。                 

fprintf()fscanf()printf()scanf()函数类似,不同之处就是printf()函数是想显示器输出,fprintf()则是向流指针指向的文件输出;fscanf()是从文件输入。

(3)文件中数值数据的读写操作

fread函数和fwrite函数

1.函数功能

  用来读写一个数据块。

2.一般调用形式

  fread(buffer,size,count,fp);

  fwrite(buffer,size,count,fp);

3.说明

  (1buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

  (2size:要读写的字节数;

  (3count:要进行读写多少个size字节的数据项;

  (4fp:文件型指针。

  (5)注意函数执行完后文件的当前指针指向文件数据自动后移count X size个字节位置

#include"stdio.h"

main()

{

   FILE *fp;

   int i;

   float b[3],a[3]={1.23,2.23,3.23};

   if((fp=fopen("data.text","wb"))=NULL)

   {

    printf("can not open file\n");

    exit(0);

   }

   fwrite(a,sizeof(float),3,fp);

   fclose(fp);

   if((fp=fopen("data.text","rb"))=NULL)

   {

    printf("can not open file\n");

    exit(0);

   }

   for(i=0;i<3,i++)

   {

    fread(%b[i],sizeof(float),1,fp);

    printf("b[%d]=%10.6f\n",i,b[i]);

   }

   fclose(fp);

}

(4)文件中数据的格式化读写操作

     fprintf函数

     功 能:

传送格式化输出到一个文件中

     用 法 

           #include <stdio.h>

      int fprintf( FILE *stream, const char *format, ... );

         fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream()指定 

       的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误 

       时返回一个负值.

     返回值

            若成功则返回输出字符数,若输出出错则返回负值。

程序例

  /* Program to create backup of the

  AUTOEXEC.BAT file */

  #include <stdio.h>

  int main(void)

  {

  FILE *in, *out;

  if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL)

  {

  fprintf(stderr, "Cannot open input file.\n");

  return 1;

  }

  if ((out = fopen("\\AUTOEXEC.BAT", "wt")) == NULL)

  {

  fprintf(stderr, "Cannot open output file.\n");

  return 1;

  }

  while (!feof(in))

  fputc(fgetc(in), out);

  fclose(in);

  fclose(out);

  return 0;

  }

  举例用法:

  #include <stdio.h>

  #include <process.h>

  FILE *stream;

  void main( void )

  {

  int i = 10;

  double fp = 1.5;

  char s[] = "this is a string";

  char c = '\n';

  stream = fopen( "fprintf.out", "w" );

  fprintf( stream, "%s%c", s, c );

  fprintf( stream, "%d\n", i );

  fprintf( stream, "%f\n", fp );

  fclose( stream );

  system( "type fprintf.out" );

  }

  屏幕输出:

  this is a string

  10

1.500000

格式化规定符  %d 十进制有符号整数  %u 十进制无符号整数  %f 浮点数  %s 字符串  %c 单个字符  %p 指针的值  %e 指数形式的浮点数  %x, %X 无符号以十六进制表示的整数  %0 无符号以八进制表示的整数  %g 自动选择合适的表示法 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值