博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

蜘蛛的H.264空间

zhizhu264.cublog.cn
C的文件操作(3)

读/写一个字符串──fgets()fputs() 

int  fputs(字符串,文件指针);

②功能:向指定文件输出一个字符串,并将读写位置指针向前移动length(串长)个字节。

如果输出成功,则函数返回值为0;否则,为非0值。  

char  *fgets( 指针,串长+1,文件指针 );

 ②功能:从指定文件中读入一个字符串,存入字符数组/指针中,并在尾端自动加一个结束标志'\0';同时,将读写位置指针向前移动length(串长)个字节。

 :如果在读入规定长度之前,遇到文件尾EOF或换行符,读入即结束。

/写一个数据块──fread()fwrite()

1.读1个数据块——fread( )

int fread(void *bufferint sizeint countFILE *fp)

fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer(起始地址)开始的内存中;同时,将读写位置指针向前移动size* count个字节。

2 .写1个数据块——fwrite ()

int  fwrite( void *bufferint sizeint countFILE *fp)

buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。

如果调用fread()fwrite()成功,则函数返回值等于count

fread()fwrite()函数,一般用于二进制文件

格式化读/写──fscanf()fprintf()函数

scanf()printf() 功能相似,区别在于:操作对象不同:

scanf()printf():标准输入(stdin)输出(stdout)文件。

fscanf()fprintf():指定文件。

int  fscanf(文件指针,"格式符",输入变量首地址表);

int  fprintf(文件指针,"格式符",输出表达式表); 

读/写函数的选用原则

从功能角度来说,fread()fwrite()函数可以完成对文件的任何操作。为方便起见,依下列原则选用:

1.读/1个字符(或字节) :选用fgetc()fputc()

2.读/1字符:选用fgets()fputs()

3.读/1(或多个)不含格式的数据:选用fread()fwrite()

 4.读/1(或多个)含格式的数据:选用fscanf()fprintf()

位置指针复位函数rewind()

1.用法:int   rewind( 文件指针 ) ;

2.功能:使文件的位置指针返回到文件头

随机读写与fseek()函数

对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针。

◆顺序读写:读写完当前数据后,系统自动将文件的位置指针,移动到下一个读写位置上。

◆随机读写:读写完当前数据后,通过fseek()函数,将位置指针移动到文件中的任何一个地方。

1.用法:int  fseek(文件指针,位移量,参照点 );

2.功能:将指定文件的位置指针,从参照点开始,移动指定的位移量

(1)参照点:用0(文件头)1(当前位置)2(文件尾)表示。

ANSI  C标准中,还规定如下符号常量:

          SEEK_SET──文件头,

          SEEK_CUR──当前位置,

          SEEK_END──文件尾

(2)位移量:以参照点为起点,向前(位移量>)或后(位移量<)移动的字节数。

ANSI C标准中,要求位移量为long  int数据。

假设文件的当前位置指针指向50(0开始编号),则:

fseek(fp, 10, 0):将位置指针移动到10

fseek(fp, 10, 1):将位置指针移动到60

实际应用建议:最好使用文件头作为参照点。

返回文件当前位置的函数ftell()

文件的位置指针可任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题。

1.用法:long  ftell( 文件指针 ) ;

2.功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)

如果返回值为-1L,则表明调用出错。

例如: offset = ftell( fp )

           if( offset = = -1L ) printf(“ftell() error\n”)

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

void main(int argc, char *argv[])

    { FILE *input, *output;

     

       if( argc != 3)

           { printf("参数个数不对\n");

               printf("\n Usage: 可执行文件名 source-file dest-file");

               exit(0);

            }

if (( input=fopen(argv[1],"r") )==NULL) /*打开源文件失败*/

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

            exit(0);

         }

  if ((output=fopen(argv[2],"w"))==NULL) /*创建目标文件失败*/

       { printf("can not create destination file\n");

           exit(0);

        }

  /*复制源文件到目标文件中*/

  for( ; ( ! feof(input) ) ; ) fputc( fgetc(input), output );

  fclose(input);

  fclose(output); /*关闭文件*/

}

发表于: 2007-05-24,修改于: 2007-05-24 10:47,已浏览510次,有评论0条 推荐 投诉

给我留言
版权所有 ChinaUnix.net 页面生成时间:0.08899