c语言 数据文件处理程序,[c] _ c语言的数据文件操作

文件是程序设计的一个重要的概念,在C语言中,常常将处理数据的程序,和要处理的数据分离开来.提高程序的方便性和实用性.

文件的基本概念:数据流,缓冲区,文件类型,文件存取方式

文件的打开和关闭: fopen,fclose

文本文件读写操作: fgetc,fputc,fgets,fputs,fscanf,fprintf 函数

二进制文件读写操作: fwrite,fread 函数

文件的定位函数: rewind,fseek,ftell 函数

文件检测函数: feof,ferror,clearerr 函数

文件具有多样性,存在磁盘的叫磁盘文件,计算机相连的设备是设备文件,存放数据的是数据文件.而已二进制存储的是二进制文件,存放程序的是源文件.

数据文件指一组相关的有序集合.存储在外部介质上,并用文件名作为其文件标志.在程序执行期间,必须先调入内存.每次读写都需要读取磁盘数据文件就非常费时,于是为了加速文件存取速率.系统使用缓冲区进行数据的暂存.从文件中读写变成从缓冲区中读写.

二进制文件与ASCll码文件

ASCll码文件也就是文本文件,在计算机中以字节存储,每个字符对应一个字节.二进制文件,采用二进制编码.

但在c系统中处理文件时,并不区分其类型.都看做字符流.按字节处理.

缓存区是程序执行时,系统提供的额外内存.用来存储准备执行的数据.它的设置是为了提高存取效率.内存的存取比磁盘驱动器快多了.c语言标准i/o函数(包含在stdio,h中).系统会自动设置缓存区.

文件的读写操作都是先对缓存区进行操作的,只有在关闭文件后才会写入磁盘

文件的存取方式主要分两种;顺序存取和随机存取

文件类型指针

在缓冲文件系统中,针对每个被使用的文件在内存中开辟一个区域,用来存放文件的有关信息(名字,文件状态,当前位置等).这些信息封装在一个文件结构体类型中.每个文件的信息都保存在一个文件结构体指针变量中.

文件结构体是系统定义的,c语言规定该类型为FIILE类型.

typedef struct{

short level;  // 缓冲区满或空的程度

unsigned flags; //文件状态的标志

char fd; //文件描述符

unsigned char hold; // 如没有缓冲区则不读取文件

short bsize; // 缓冲区大小

unsigned char* buffer; // 数据缓冲区的位置

unsigned ar* curp; //指针,当前的指向

unsigned istemp; //临时文件

short token; // 用于有效性检查.

}

可以引用文件类型定义文件类型变量来实现对文件的操作.

打开文件

FILE *fp;

fopen_s(&fp,"test.txt","w");

关闭文件

fclose(fp);

文件的打开关闭需要配套使用.

文件的使用方式

r只读(打开),r+读写(不存在返回空,读写从头开始,写时覆盖).

w只写(打开或建立文件,内容全部消失).w+读写(打开或新建,读写可以通过位置函数定义)

a追加数据.(打开或新建),a+(读写,位置可以定义) 以上都对文本文件进行操作.

rb,rb+,wb,wb+,ab,ab+都是对二进制文件操作.

文件的读写

fgetc 逐字符读取.fputc逐字符写入:

// 逐字符读取文件

void R_filechar(const char* ch){

FILE* pfile;

fopen_s(&pfile, ch, "r");

if (pfile == NULL)

{

printf("open file error");

}

else {

char cha = fgetc(pfile);

while (cha != EOF) {

putchar(cha);

cha = fgetc(pfile);

}

fclose(pfile);

}

}

fgets与fputs 逐字符串读取函数:

// 字符串读取文件

void R_filestr(const char* ch) {

char a[20];

FILE* pfile;

fopen_s(&pfile,ch,"r");

if (pfile == NULL)

{

printf("open file error");

}

else {

int i = 0;

fgets(a,20,pfile);

while (i<4)

{

printf("%s

",a);

fgets(a, 20, pfile);

i++;

}

fclose(pfile);

}

}

fwrite与fread函数,以数据块为单位的二进制文件读取函数.和格式化读写函数:fscanf,fprintf:(比较常用的)

//数据块写入文件(struct)

void W_filestu(const char* ch,Student* pstu) {

FILE* pfile;

fopen_s(&pfile, ch, "wb+");

if (pfile == NULL)

{

printf("open file error");

}

else {

fwrite(pstu,sizeof(Student),2,pfile);

// fprintf(pfile,"%s%d%d%s",pstu->name,pstu->num,pstu->age,pstu->addr);

fclose(pfile);

}

}

void R_filestu(const char* ch, Student* qstu) {

FILE* pfile;

fopen_s(&pfile, ch, "rb");

if (pfile == NULL)

{

printf("open file error");

}

else {

fread(qstu, sizeof(Student), 2, pfile);

// fscanf(pfile, "%s    %d  %d  %s",qstu->name,&qstu->num,&qstu->age,qstu->addr);

for (int i = 0; i < 2; i++, qstu++)

{

printf("%s  %d  %d  %s

", qstu->name, qstu->num, qstu->age, qstu->addr);

}

fclose(pfile);

}

}

当然,最常使用的还是fwrite,fread函数,对结构体进行存取.

文件定位函数

rewind(文件指针): 返回当文件头部.

fseek(文件指针,位移量,起始点), 位移量指的是以字节为单位.起始点表示从何处计算位移量:

起始点

表示符号

数字表示

文件首

SEEK_SET

0

当前位置

SEEK_SET

1

文件尾

SEEK_SET

2

ftell函数,用来得到文件位置指针当前位置相对于文件首偏移的字节数.通常配合fseek函数.

文件检测函数

feof()函数. 用来检测文件位置指针是否处于文件结束位置.通常用来做遍历文件的判断条件.是一个经常使用到的函数.到达返回true,否则返回false.

feeror(),读写文件是否出错的检测函数,返回0表示未出错,否则有错.

2019.12.25

17:07

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值