文件的操作

一、文件的作用与分类

程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,就需要使⽤⽂件。

文件分为数据文件程序文件:

程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)。

数据文件又分为文本文件二进制文件

数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。

二、文件指针

FILE* pf;

定义pf是⼀个指向FILE类型数据的指针变量。可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变量)。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与它关联的⽂件。

文件的打开和关闭

我们可以利用fopen,fclose和文件指针来进行文件的开关操作

//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );

其中mode代表文件的打开模式:

实例如下:

​
#include <stdio.h>
int main ()
{
FILE * pFile;
//打开⽂件
pFile = fopen ("myfile.txt","w");
//⽂件操作
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
//关闭⽂件
fclose (pFile);
}
return 0;
}

​

三、文件顺序读写函数介绍

(1)fgetc函数

int fgetc ( FILE * stream );

fgetc函数只有一个参数,指向标识输入流的文件对象的指针。当文件读取到末尾或者发生读取错误时,该函数返回EOF。该函数用于输入字符,适用于所有输入流。

(2)fputc函数

int fputc ( int character, FILE * stream );

该函数是字符输出函数,将字符输出到文件中,返回所写入的字符,如果发生错误,则返回EOF,适用于所有输出流。

(3)fgets函数

char * fgets ( char * str, int num, FILE * stream );

str指的是待输入的字符串,num代表复制到字符串中的字符的最大个数,该函数从文件中得到字符串复制到str中,成功则返回str的地址,失败则返回NULL,适用于所有输入流

(4)fputs函数

int fputs ( const char * str, FILE * stream );

str代表要输出到文件上的字符串,写入成功则返回非负数值,失败就返回EOF,适用于所有输出流。

(5)fscanf函数

int fscanf ( FILE * stream, const char * format, ... );

fscanf函数表示将文件流中的内容按照format的要求进行读取输入到所存放的地方,该函数返回成功读取的元素的个数,失败则返回EOF。适用于所有输入流。

(6)fprintf函数

int fprintf ( FILE * stream, const char * format, ... );

fprintf函数将后面的内容放到文件中去。适用于所有输出流。

(7)fread函数

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

fread函数是二进制输入函数,只适用于文件。

ptr代表字符串,size表示所传元素的大小,count表示所传元素个数,stream是文件指针。

fread函数是用二进制的方式从文件中读取数据块放到数组中

(8)fwrite函数

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

fwrite函数是二进制输出函数,只适用于文件。

参数意义与fread函数的参数差不多,为了将数组中的元素以二进制的形式放在文件中。

四、文件随机读取函数

(1)fseek函数

fseek根据⽂件指针的位置和偏移量来定位⽂件指针。

int fseek ( FILE * stream, long int offset, int origin );

offset代表偏移量,origin代表起始位置,有三种情况:

1、文件的起始位置(SEEK_SET) 2、文件现在的位置(SEEK_CUR) 3、文件末尾(SEEK_END)

该函数是执行成功后,stream将指向以origin为基准,偏移offset个字节;执行失败则不改变stream指向的位置。

(2)ftell函数

long int ftell ( FILE * stream ); 

ftell函数返回文件指针相对于起始位置的偏移量。

(3)rewind函数

void rewind ( FILE * stream );

rewind函数是让文件指针返回文件的起始位置

五、文件结束的判定

在⽂件读取过程中,不能⽤feof函数的返回值直接来判断⽂件的是否结束。
feof 的作⽤是:当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。
1. ⽂本⽂件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
例如:
fgetc 判断是否为 EOF 
fgets 判断返回值是否为 NULL .
2. ⼆进制⽂件的读取结束判断,判断返回值是否⼩于实际要读的个数。
例如:fread判断返回值是否⼩于实际要读的个数。

  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值