【C语言第十六回合】:文件函数大锅饭
【学习目标】
1. fprintf和fscanf
2. fgets和fputs
3. fseek和ftell
A:fprint和fscanf的使用
( 1 ):fprint
按照给定的格式输入文件流中。
函数原型:intfprintf ( FILE * stream, const char * format, ... );
[程序]
#include <stdio.h>
#include <stdlib.h> //for exit()
int main( void )
{
charstr[]= "www.codingit.howbbs.com";
FILE*pfile = NULL ;
pfile=fopen( "test.txt", "w" ); //打开文件,并指向文件首地址
if(pfile== NULL ) //检测指针获取地址
{
perror( "Cannot open thisfile\n" );
exit( 1 );
}
fprintf(pfile, "%s", str );
fclose(pfile ); //关闭文件指针
return 0;
}
在当前目录下的test.txt中有如下内容:
www.codingit.howbbs.com
( 2 )fscanf的使用
按照给定的格式从文件流中读取数据.
函数原型:intfscanf ( FILE * stream, const char * format, ... );
[程序]
#include <stdio.h>
#include <stdlib.h> //for exit()
int main( void )
{
charstr[ 100 ];
FILE*pfile = NULL ;
pfile=fopen( "test.txt", "r" ); //打开文件,并指向文件首地址
if(pfile== NULL ) //检测指针获取地址
{
perror( "Cannot open thisfile\n" );
exit( 1 );
}
fscanf(pfile, "%s", str );
printf("读取的内容为:%s\n", str );
fclose(pfile ); //关闭文件指针
return 0;
}
运行结果:
读取的内容为: www.codingit.howbbs.com
( 3 )fprintf和fscanf一起使用
//综合的fprintf和fscanf的使用
#include <stdio.h>
#include <stdlib.h> //for exit()
int main( void )
{
//注意字符数组的大小!!!超过范围会有错误!!!
charstring[ 1000 ];
charstr[ 1000 ]= "www.blog.csdn.net/mirrorsbeyourself";
FILE*pfile = NULL ;
pfile=fopen( "test.txt", "a+" ); //打开文件
if(pfile== NULL ) //检测指针获取地址
{
perror( "Cannot open thisfile\n" );
exit( 1 );
}
//再写入 一些数据
fprintf(pfile, "%s", str );
//把文件指针指向文件的首地址
rewind(pfile );
//把文件中的
fscanf(pfile, "%s", string );
printf("读取的内容为:" );
printf("%s\n", string );
fclose( pfile ); //关闭文件指针
return 0;
}
运行结果:
B:fgets和fputs的使用
( 1 )fgets的使用
从文件流中读取数据
函数原型:char * fgets ( char * str, int num, FILE * stream );
[ 程序 ]
#include <stdio.h>
#include <stdlib.h> // for exit
int main( void )
{
FILE*pfile= NULL;
charstr[ 100 ]; //注意,只能存100个字符
pfile=fopen( "test.txt", "r" );
if(pfile== NULL )
{
perror("Cannot open this file\n" );
exit(1 );
}
fgets(str, 100, pfile );
printf("成功读取文件的内容" );
printf("文件内容为: " );
puts(str ); //显示str中的内容
return0;
}
运行结果:
( 2 )fputs的使用
向文件流中输入数据
函数原型:intfputs ( const char * str, FILE * stream );
[ 程序 ]
#include <stdio.h>
#include <stdlib.h> // for exit()
int main( void )
{
FILE*pfile= NULL;
char*str= "http://codingit.howbbs.com/";
pfile=fopen( "test.txt", "w" );
if(pfile== NULL )
{
perror("Cannot open this file\n" );
exit(1 );
}
fputs(str, pfile );
printf("成功向文件输入数据\n" );
fclose(pfile );
return0;
}
运行结果:
C:fseek和ftell的使用
( 1 )fseek的使用
返回文件位置的索引
函数原型:intfseek ( FILE * stream, long int offset, int origin );
a. stream:文本文件或二进制文件。
b. offset:
(1) 二进制文件:字节偏移量,从origin(起始地址)的数量。
(2) 文本文件:要么零,或取文件指针返回一个值。
c. origin:
(origin)起始地址常量 | 参考位子 |
SEEK_SET | 首地址 |
SEEK_CUR | 当前地址 |
SEEK_END | 位地址 |
[程序]
//fseek函数的使用实例
#include <stdio.h>
#include <stdlib.h> // for exit()
int main( void )
{
FILE*pfile= NULL;
char str[ 100 ];
pfile=fopen( "test.txt", "r" );
if(pfile== NULL )
{
perror("Cannot open this file\n" );
exit(1 );
}
//origin==SEEK_SET, offset= 0
fseek(pfile, 0, SEEK_SET );
//从当前开始获取数据
fgets(str, 100, pfile );
printf("SEEK_SET( 0 ): %s\n", str );
//使指针指回首地址
rewind(pfile );
//origin=SEEK_CUR, offset= 7 (向右偏移量为7)
fseek(pfile, 7, SEEK_CUR );
//从当前开始获取数据
fgets(str, 100, pfile );
printf("SEEK_CUR( 7 ): %s\n", str );
//使指针指会首地址
rewind(pfile );
//origin=SEEK_END offset= -20(向左偏移20)
fseek(pfile, -20, SEEK_END );
//从当前开始获取数据
fgets(str, 100, pfile );
printf("SEEK_END( -20 ): %s\n", str );
fclose( pfile );
return0;
}
运行结果:
( 2 )ftell的使用
函数原型:long intftell ( FILE * stream );
作用:求文件首地址到当前位置的字符个数。
[程序]
#include <stdio.h>
#include <stdlib.h> //for exit(), malloc( )
int main( void )
{
FILE*pfile= NULL;
char*str= NULL;
intnum= 0;
pfile=fopen( "test.txt", "r" );
if(pfile== NULL ) //检测
{
perror( "Cannot open this file\n");
exit(1 );
}
//把指针指向文件的位地址
fseek(pfile, 0, SEEK_END );
num=ftell( pfile );
printf("文件中有%d个字符\n", num );
str=( char *)malloc( ( num+ 1 )* sizeof( char ) );
if(str== NULL ) //检测
{
perror("内存分配失败\n" );
exit(1 );
}
//重新把指针指向文件首地址
rewind( pfile );
//获取文件中的内容
fgets(str, num+ 1, pfile );
//输出内容
printf("文件中的数据为:%s\n", str );
fclose(pfile );
return0;
}
运行结果:
D:rewind函数的使用
原型:voidrewind ( FILE * stream );
作用:把文件指针指向文件的首地址(具体情况看上面程序)
E:fflush的使用
原型:int fflush( FILE * stream );
作用:刷新缓冲区。
调用fflush函数可以将缓存区中任何威胁的数据发送到有pfile指定的文件中去。如果pfile是空指针,将刷新掉搜有的输出缓冲。对一个输入流使用fflush函数的效果没有定义。只要最近一次使用流不是输入操作,就可以读一个更新流使用这个函数。
特别注意:要了解更多相关知识,请到www.cplusplus.com查找,谢谢
【指尖的微笑】错误在所难免,希望得到大家的指正^-^
LearnCoding(http://it.bangedushuren.cn/)原创,转载请注明