I/O函数

        文件分为文本类文件和二进制文件两种,若要对文件进行读写操作,首先要打开文件:

一. 文件打开函数

FILE * fopen(const char *filename,const char *mode)

该函数返回值为文件句柄,可以通过文件句柄对文件进行操作。

注意:一定要判断文件打开是否成功,只有成功了才可以进行以下的操作

filename:表示要打开的文件名

mode:表示文件的打开方式,下面列举几种常用的文件打开方式:

            r:以只读方式打开,如果要打开的文件不存在,则打开失败

            r+:以读写的方式打开,如果要打开的文件不存在,则打开失败

            w:以只写的方式打开,如果要打开的文件不存在,就创建该文件

            w+:以读写的方式打开,如果要打开的文件不存在,就创建该文件

            a:以追加写的方式打开,即该文件的末尾处开始写,如果要打开的文件不存在,就创建该文件

            a+:以读写的方式打开,从头开始读,从尾开始写,如果要打开的文件不存在,就创建该文件

然后,对文件进行读写操作,读写操作函数又分为两大类:文本类文件读写和二进制文件读写。

二. 文本类文件读写

1. 未格式化I/O

(1)字符I/O函数

int getchar();//从标准输入流(键盘)读取字符
int putchar(int c);//将字符c写入标准输出流(屏幕)
int getc(FILE *stream);//从文本流stream中读取字符,将stream替换为标准输入流(stdin)即为函数getchar
int putc(int c,FILE *stream);//将字符c写入文本流stream中,若把stream替换为标准输出流(stdout),即为putchar函数

另外,fgetc,fputc函数与getc,putc的参数和作用相同。

(2)行I/O函数

char *gets(char *str);//从标准输入流(键盘)中读取一行字符串,存入字符串str中
int puts(const char* str);//将字符串str写入标准输出流(屏幕)中
char *fgets(char *str,int num,FILE*stream);//从文本流stream中读取num个字符放入字符串str中,将stream替换为stdin与函数gets的效果相同
int fputs(const char *str,FILE*stream);//将字符串str写入文本流stream中,将stream替换为stdout与函数puts的效果相同

2. 格式化I/O

(1)I/O到标准流

int scanf(const char *format,...);//从标准输入流(stdin)中格式化(按format指定的格式)的读取内容
int printf(const char *format,...);//将格式化(格式有format指定)后的内容输出到标准输出流(stdout)中

如:

scanf("%d",&n);//从键盘读取一个整数赋给变量n
printf("%s",str);//将字符串输出到屏幕上

(2)I/O到文件中

int fscanf(FILE *stream,const char  *format,...);//从文本流stream中格式化读取内容
int fprintf(FILE *stream,const char *format,...);//将内容格式化写入文本流stream中

(3)I/O到字符串或数组中

int sscanf(char *str,const char *format,...);//按format指定的格式从str中读取内容
int sprintf(char *str,const char *format,...);//按格式format将内容写入str中

三. 二进制I/O

size_t fread(void *str,size_t size,size_t count,FILE *stream);
//从stream中读取count个基本单元,一个单元有size字节的内容到str中
//该函数的返回值是实际读取到的count数
size_t fwrite(const void *str,size_t size,size_t count,FILE *stream);
//将str中的内容写count个单元,一个单元size个字节的内容到stream中
//该函数的返回值是实际写入的count数

        如果读取文件时,实际返回的count数与原设定的count数不同,则读取或写入的内容到达结尾或出错。可以根据下面两个函数进行判断:

int feof(FILE *sream);//检查读取文件是否到达结尾,若到达,返回非零值1,否则返回0
int ferror(FILE *stream);//检查文件的读取是否出错,若出错,返回非零值1,否则,返回0

四,判断文件的大小

1.

int fseek( FILE *stream, long offset, int origin );//设置文件的读写位置

其中,stream为文件句柄,

          origin为三个值之一:SEEK_SET(文件开头),SEEK_CUR(当前位置),SEEK_END(文件结尾)

          offset:偏移值

该函数的作用是将文件的读写位置设定在距origin指定的值偏移量为offset处。

2.

long ftell(FILE *stream);

该函数的作用是返回文件stream从开头到该文件读写位置所在处的字节数

3.

rewind(FILE *stream);
该函数的作用是将文件的读写位置设置在开头处。

        所以,在不改变文件(文件句柄为stream)读写位置的前提下,获取文件的大小,可以使用以下方法:

fseek(stream,0,SEEK_END);
long lsize=ftell(stream);
rewind(stream);

五,关闭文件

        在对文件进行读写操作结束后,就要关闭文件。

int fclose(FILE *stream);//关闭成功返回1,不成功,返回0














  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值