/*以写的方式打开名为test.txt的文件*/ fp=fopen(\ /*将字符串写入文件*/ fputs(str,fp); fclose(fp); return 0; }
例程说明:
(1)首先用字符数组str存储一个字符串,并以写的方式打开名为test.txt的文件。 (2)再用fputs函数将该字符串输出到test.txt的文件中。
fread:从流中读取字符串函数
函数原型:int fread(void *buf, int size, int count, FILE *fp); 头文件:#include
返回值:返回实际读入数据项的个数,即count值。若遇到错误或文件结束返回0。 例程如下应用fread函数从文件中读取数据到缓冲区。
#include
FILE *fp;
char str[] = \char buf[20];
if ((fp = fopen(\ == NULL) {
fprintf(stderr,
\return 1; }
/* 向文件中写入字符串数组中的数据 */ fwrite(str, strlen(str), 1, fp);
/* 将文件指针定位到文件开头 */ fseek(fp, SEEK_SET, 0);
/* 把文件中的数据读出并显示 */ fread(buf, strlen(str), 1, fp); printf(\ fclose(fp); return 0; }
例程说明: (1)程序首先以读写方式打开名为test.txt的文件。这里有一个判断,若打开文件失败,则在屏幕上显示出错信息。
(2)应用fwrite函数向文件写入数据。有关fwrite函数后面做详细介绍。 (3)应用fseek函数将文件指针定位到文件开头。
(4)应用fread函数把文件中的数据读入内存。这里读取一个长度为strlen(str)的字符串,并将该字符串存入以buf为首地址的内存缓冲区中。 (5)显示该字符串。
freopen:替换文件中数据流函数
函数原型:FILE *freopen(char *filename, char *type, FILE *fp); 头文件:#include
函数功能:关闭fp所指向的文件,并将该文件中的数据流替换到filename所指向的文件中去。该函数共三个参数:第一个参数filename是文件流将要替换到的文件名路径;第二个参数type是文件打开的方式,它与fopen中的文件打开方式类似;第三个参数fp是要被替换的文件指针。
返回值:返回一个指向新文件的指针,即指向filename文件的指针。若出错,则返回NULL。
例程如下关闭一个终端,并将数据流替换至一个新文件中。
#include
FILE *Nfp;
/* 替换标准输出文件上的数据流到新文件test.txt */ if (Nfp=freopen(\ == NULL)
fprintf(stderr, \
/* 标准输出文件上的数据流将会被替换到新文件中 */ printf(\
/* 关闭标准输出文件 */ fclose(stdout);
/*关闭新生成的文件*/ fclose(Nfp); return 0; }
例程说明:
(1)首先,程序以写的方式打开名为test.txt的文件,将标准输出文件上的数据流\will go into a file.\替换到新生成的文件test.txt中。freopen函数返回一个指向新文件的指针,即指向文件test.txt的指针,并将它存放到Nfp中。 (2)然后关闭标准输出文件,fclose(stdout)。 (3)最后关闭新生成的文件fclose(Nfp)。
(4)本程序的执行结果是在当前目录下生成一个文件test.txt,并将原终端的数据流\重新写入test.txt文件中。
fscanf:格式化输入函数
函数原型:int fscanf(FILE *fp, char *format[,argument...]);
头文件:#include
返回值:返回已输入的数据个数。若错误或文件结束返回EOF。 例程如下应用fscanf函数从终端向内存输入数据。
#include
char ch;
printf(\
/* 从标准输入文件中读取一个字符,并送至ch */ if (fscanf(stdin, \
printf(\ was: %c\\n\else {
/*出错提示*/
fprintf(stderr, \exit(1); } return 0; }
例程说明:
(1)首先,程序提示用户从键盘输入一个字符。这时,标准输入文件指针stdin指向该字符。 (2)调用fscanf函数从标准输入文件中读取一个字符,并送至ch。这里应该注意两点:
? fscanf函数的第一个参数不是用户定义的文件指针,而是系统定义的标准输入
文件指针stdin。但用法与用户定义的文件指针类似。 ? &ch是指向字符型数据的指针,因此,输入的格式format也要为字符型\,
它们必须保持一致。
(3)该函数的使用与scanf类似。其实,scanf函数是fscanf函数的一个特例,它只能从标准输入文件(键盘终端)中输入数据。而fscanf函数则也可以从一般用户定义的文件中输入数据。
fseek:文件指针定位函数
函数原型:int fseek(FILE *fp, long offset, int base); 头文件:#include
ANSI C标准指定的起始点名字
起始点 文件当前位置 名字 SEEK_CUR 数字代码 1 文件开始位置 文件末尾位置 SEEK_SET SEEK_END 0 2
偏移量用长整型数表示。ANSI C标准规定,在数的末尾加L就表示长整型数。该函数在随机读取较长的顺序文件时是很有用的。
返回值:成功返回0,否则返回非0。 例程如下文件指针的定位演示。
#include
FILE *fp; char line[81]; int result;
/*以读写的方式打开打开名为test.txt的文件*/ fp = fopen( \if( fp == NULL )
printf( \!\\n\else {
/*按照规定格式将字符串写入文件*/
fprintf( fp, \
\ /*将文件指针定位到离文件头23个字节处*/ result = fseek( fp, 23L, SEEK_SET); if( result )
perror( \else {
printf( \ /*从fp指向的文件中读取字符串*/ fgets( line, 80, fp );
/*显示读取的字符串*/ printf( \ } fclose(fp); } }
例程说明:
(1)首先,程序以读写的方式打开打开名为test.txt的文件。 (2)然后,应用fprintf函数按照规定格式将字符串\'test.txt'.\\n\写入文件。 (3)再将文件指针定位到离文件头23个字节处,即将文件指针fp定位在字符串\the file 'test.txt'.\\n\的开头。
(4)然后,应用fgets函数从fp指向的文件中读取字符串,并显示在屏幕上。 本程序的运行结果为在屏幕上显示出以下字符串:
File pointer is set to middle of first line. This is the file 'test.txt'.
fsetpos:定位流上的文件指针函数
函数原型:int fsetpos(FILE *fp, const fpos_t *pos); 头文件:#include
函数功能:将文件指针定位在pos指定的位置上。该函数的功能与前面提到的fgetpos相反,是将文件指针fp按照pos指定的位置在文件中定位。pos值以内部格式存储,仅由fgetpos和fsetpos使用。
返回值:成功返回0,否则返回非0。 例程如下应用fsetpos函数定位文件指针。
#include
FILE *fp; fpos_t pos;
char buffer[50];
/*以只读方式打开名为test.txt的文件*/ if( (fp = fopen( \printf( \else {
/*设置pos值*/
pos = 10;
/*应用fsetpos函数将文件指针fp按照 pos指定的位置在文件中定位*/
if( fsetpos( fp, &pos ) != 0 ) perror( \else
{
/*从新定位的文件指针开始读取16个字符到buffer缓冲区*/ fread( buffer, sizeof( char ), 16, fp ); /*显示结果*/
printf( \ } } fclose( fp ); }
例程说明:
(1)首先,程序以只读方式打开名为test.txt的文件。在这里,test.txt文件中已存入字符串This is a test for testing the function of fsetpos.
(2)将pos设置为10。应用fsetpos函数将文件指针fp按照pos指定的位置在文件中定位。这样文件指针fp指向字符串中test的字母t。 (3)再从新定位的文件指针开始读取16个字符到buffer缓冲区,也就是说读取字符串\到缓冲区buffer。
(4)最后显示结果:16 bytes at byte 10: test for testing 。