c语言二进制编程,技术分享:C语言编程

今天咱们来看一看C语言文件部分,简单实用!

知识点1【文件的概述】

文件的分类:文本文件 二进制文件

文本文件:是基于字符编码

二进制文件:是基于值编码

文本文件 和 二进制文件的对比:

知识点2【文件指针】

文件的操作步骤:

1、打开文件

2、读写文件

3、关闭文件

知识点3【文件的打开 fopen】

谈一谈mode的格式:

r只读 w只写 a追加 +可读可写 t文本文件(默认省略) b(二进制文件)

文件的关闭

知识点4【一次读写一个字符】

写一个字符:fputc

案例:

void test03() { char msg[128]=""; printf("请输入你要写入文件的字符串\n"); fgets(msg,sizeof(msg), stdin); //fopen打开一个文件 FILE *fp = fopen("a.txt", "w"); if(fp == NULL) { perror("fopen"); return; } //操作文件fputc int i=0; while(msg[i] != '\0') { fputc(msg[i++], fp); } //关闭文件 fclose(fp); }

运行结果:

a.txt

读一个字符:fgetc

EOF只适用于 文本文件 -1

feof()文本文件 和二进制文件都可以用

案例:

void test04() { //以只读的方式打开文件 FILE *fp = fopen("a.txt", "r"); if(fp == NULL) { perror("fopen"); return; } //操作文件 char msg[128]=""; int i=0; while((msg[i++]= fgetc(fp)) != EOF); msg[i-1] = 0; printf("msg = %s\n", msg); //关闭文件 fclose(fp); }

运行结果:

知识点5【字符串 读写】

写:fputs

void test05() { FILE *fp = fopen("a.txt", "w"); if(fp == NULL) { perror("fopen"); return; } char *msg[] = {"床前明月光\n","疑似地上霜\n", "举头望明月\n","低头思故乡"}; int n = sizeof(msg)/sizeof(msg[0]); int i=0; for ( i = 0; i

运行结果:

读:

void test06() { FILE *fp = fopen("a.txt", "r"); if(fp == NULL) { perror("fopen"); return; } char buf[128]=""; while(fgets(buf,sizeof(buf), fp)) { printf("buf=%s\n",buf); } fclose(fp); }

运行结果:

知识点6【文件的块读写】

将内存数据 原样写入磁盘中 将磁盘数据 原样 读取到内存中 不会对数据作任何转换

如果文件 不输出屏幕上 建议 用文件的块读写

写:

typedef struct { char name[8];//英雄的姓名 int def;//防御 int atk;//攻击 }HERO; void test07() { HERO hero[]= { {"德玛", 90, 40}, {"提莫", 30, 120}, {"盲僧", 60, 80} }; int n = sizeof(hero)/sizeof(hero[0]); FILE *fp = fopen("a.txt", "w"); if(fp == NULL) { perror("fopen"); return; } //块写 fwrite(hero,sizeof(HERO), n, fp); fclose(fp); }

运行结果:

读:

#include void test08() { HERO hero[3]; memset(hero,0,sizeof(HERO)); FILE *fp = fopen("a.txt", "r"); if(fp == NULL) { perror("fopen"); return; } //块写 fread(hero,sizeof(HERO), 3, fp); int i=0; for ( i = 0; i

运行结果:

案例:fread读到的块数

知识点7【格式化文件读写】按照特定的便于阅读的格式将数据写入文件(方便查看,代价存在数据的转换 效率低)

格式化写:fprintf

void test10() { HERO hero[]= { {"德玛", 90, 40}, {"提莫", 30, 120}, {"盲僧", 60, 80} }; int n = sizeof(hero)/sizeof(hero[0]); FILE *fp = fopen("a.txt", "w"); if(fp == NULL) { perror("fopen"); return; } //格式化写 int i=0; for (i = 0; i

运行结果:

格式化读:fscanf

#include void test11() { HERO hero[3]; memset(hero,0,sizeof(HERO)); FILE *fp = fopen("a.txt", "r"); if(fp == NULL) { perror("fopen"); return; } int i=0; for ( i = 0; i

运行结果:

知识点8【文件的随机读写】

引入:顺序读写

1、rewind()复位文件流指针

2、ftell返回文件流指针 距离文件首部的字节偏移量

3、fseek定位文件流指针位置

案例:测量文件的总大小 并一次性读取文件的全部数据

1、使用fseek将文件的流指针定位到文件尾部

2、使用ftell得到文件流指针的偏移量 == 文件的总大小

3、根据文件的总大小 申请堆区空间

4、复位文件流指针rewind

5、一次型读取数据

#include #include void test01() { FILE *fp = fopen("b.txt", "r"); //将文件流指针定位到文件尾部 fseek(fp,0, 2); //通过ftell获取文件的总大小 long len = ftell(fp); printf("len = %ld\n", len); //申请空间 char *file = (char *)calloc(1,len+1); //复位文件流指针 rewind(fp); //读取文件数据 fread(file,len,1,fp); printf("file=%s\n", file); //释放堆区空间 if(file != NULL) { free(file); file=NULL; } fclose(fp); } int main(int argc, char const *argv[]) { test01(); return 0; }

运行结果:

练习:文件加密(大家可以试试呀)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值