关于c语言文件操作

1.二进制文件和文本文件

c语言文件有两种类型:文本文件(也称ASCII码文件)和二进制文件

文本文件中的每一位数字都单独占用一个字节的储存空间;
二进制文件是把整个数字作为一个二进制数来储存的,并非像是文本文件一样每一个数字都占用一个单独的储存空间。

c语言文件又称为字节流。
c语言有缓冲型非缓冲型两种文件系统。
缓冲型——系统自动在内存中为正在使用的文件开辟缓冲区。在读写文件时,数据先送到缓冲区,在传给c语言程序或外存上。缓冲文件系统利用文件指针标识文件。
非缓冲型——缓冲区必须由程序员自己设定。非缓冲区文件系统没有文件指针,它使用称为文件号的整数来标识文件。

缓冲型文件系统中的文件操作,也称为高级文件操作

2.文件的打开与关闭

函数 fopen()用来打开文件

函数原型——FILE *fopen(const char *filename,const char *mode );
第一个形参filename——表示文件名,可包含路径和文件名两部分
第二个形参mode——表示文件打开方式
其取值表如下

字符含义
“r”以只读方式,打开文本文件。若文件不存在,则出错。
“w”以只写方式,创建并代开文本文件,已存在的文件将被覆盖。无论文件存在与否,都需创建一个新的文本文件
“a”以只写方式,打开文本文件,位置指针移到文件末尾,想文件尾部添加数据,源文件数据保留。若文件不存在,则出错。
“+”与上面的字符串组合,表示以读写方式打开文本文件
“b”与上面的字符串组合,表示打开二进制文件

eg:fp=fopen(“D:\\demo.txt”,“w+”);

文件指针fpshi指向FILE结构类型的指针变量,其定义:FILE *fp

文件打开后必须关闭

函数fclose()用来关闭打开的文件

其函数原型——int fclose(FILE *fp);
当文件关闭成功时返回0值,否则返回非零值

3.按字符读写文件

<1>读写文件中的字符

函数fgetc()用于从一个只读或者读写方式打开的文件上读字符。

其函数原型——int fgetc(FILE *fp)
fp若读到文件末尾,则返回EOF

函数fputc()用于将一个字符写到一个文件上

其函数原型——int fputc(int c,FILE *fp);
若写入错误,则返回EOF,否则返回字符c

检查文件是否打开

eg:if((fopen(“demo.txt”,“w”))==NULL);
{
printf(“Failure to open the file.\n”);
exit(0);
}

函数feof()用于检查是否到达文件末尾

当文件位置指针指向文件结束符是,返回非0值,否则返回0值
函数feof()总是在读完文件所有内容后再执行一次读文件操作才返回真(非零)值。

<2>读写文件中的字符串

使用fgets()函数,读出字符串

其函数原型——char *fgets(char *s,int n,FILE fp);
该函数从fp所指的文件中读取字符串并在字符串末尾加上’\0’,然后存入s,即最多读取n-1个字符
当读到回车换行符,或读满n-1个字符时函数返回该字符串的首地址,即
s的值,读取失败返回空指针(NULL)

值得注意的是,fgets()函数无论出错还是到达文件末尾是都返回NULL
可以用feof()或ferror()来检查是否出现文件错误
如果出现错误返回非零值,没有错误返回零值
eg:
if(ferror(fp))
{
  printf(“Error on file.\n”);
}

使用函数fputs(),输入字符串

其函数原型——int fputs(const char*s,FILE *fp);
若出现写入错误,则返回EOF,否则返回一个非负数

与gets()不同的是,fgets()从指定的流读写字符串,读到换行符时将换行符也作为字符串的一部分读到字符串中。同理,与puts()不同的是,fputs()不会在写入文件的字符串末尾加上换行符。

4.按格式读写文件

函数fscanf()用于按指定格式从文件读数据

其函数原型—— int fscanf(FILE *fp,const char *format,…);
其中,第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为地址参数表列,后两个参数和返回值与函数scanf()相同

函数fscanf()用于按指定格式向文件写数据

其函数原型—— int fprintf(FILE *fp,const char *format,…);
其中,第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为输出参数表列,后两个参数和返回值与函数printf()相同

函数fscanf()与fscanf()输入\输出时要把二进制数转化成为ASCII值,耗时长

5.按数据块读写文件

fread()用于从fp所指的文件中读取数据块并存储到buffer指向的内存中。

unsigned int fread(void *buffer,unsigned int size,unsigned int count,FILE *fp)

其中——buffer 是待读入数据块的起始地址。size是每个数据块的大小(待读入的每个数据块的字节数)。count 是最多允许读取的数据块个数(每个数据块size个字节)函数返回的是实际读到的数据块个数

fwrite()用于将buffer指向的内存中的数据写入fp所指的文件

unsigned int fread(const void *buffer,unsigned int size,unsigned int count,FILE *fp);
函数返回的是实际写入的数据块个数

6.文件的随机读写(待补充)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值