文章目录
文本文件和二进制文件的处理文件键盘和屏幕作用为文本流换行与EOF文件指针变量图示二进制文件更高效率的文件操作二进制的优缺点文本文件和二进制文件的处理
标准输入标准输出程序控制文件
文本文件,即在外存上的已命名的字符集合 自动在最后加一个特殊字符,即文件结束符,标记为EOF 不妨表示为<eof>
按下return or enter键时,会在文件中放置一个换行符\n
This is a text file<newline>It has two lines.<newline><eof>
每一行都以<newline>
为结束每一个文件都以<eof>
为结束而在磁盘中,它是连续的存储空间占用,如下
This is a text file<newline>It has two lines.<newline><eof>
即文本输入流,是字符代码的连续流,只不过有些代码表示换行或是结束 流可用于输入【来自键盘】可用于输出【给到屏幕,或是打印机,或是文件】可用于文件读写 input streamoutput stream
键盘和屏幕作用为文本流
交互编程 用户有输入,从键盘输入 stdin 系统有输出,输出到屏幕上 stdout 如果出错,也显示到屏幕上 stderr这些都是文本流,即都是由一个个字符构成的,纯字符在交互编程时,使用一个标记值指示数据输入的结束,而不是放置eof
,不过eof
也可以使用 单个键不能代表eof
使用ctrl+D
可以在unix上表示eof
使用ctrl+Z
可以在windows上表示eof
换行与EOF
<newline>
标记一行文本的结束<eof>
标记整个文件的结束// 循环处理输入// 但这里没有检测:输入成功与否,只是循环的条件是出现EOF才退出,否则一直做“输入”和“处理”int status;int num;for (status = scanf("%d", &num); status != EOF; status = scanf("%d", &num)){process(num);// 处理}
文件指针变量
库:stdio.h
函数:fopen()可以准备好fp
字符串表示文件名
字符串表示打开模式
只读只写读写追加
如果用"w"模式打开一个文件,之前这个文件如果已经存在,则通常会引起文件内容的丢失
也就是说,打开一个文件时,OS会自动为文件版本编号,并产生一个新版本,那么文件的内容就不会丢失,这时,就要用“a”模式打开
#include <stdio.h>#define STASIZ 80int main(void){char inName[STRSIZ], outName[STRSIZ];FILE *inp, *outp;char ch;printf("Enter name of file you wanna backup > ");// 打开读文件:直到打开文件成功,注意for循环的ABCD四个部分,打开成功,才会退出for循环for(scanf("%s",inName);// A(inp = fopen("inName","r"))==NULL;// Bscanf("%s",inName))// C{// Dprintf("Connot open %s for input\n",inName);printf("Re-enter file name > ");}// 打开写文件:直到打开文件成功for(scanf("%s",outName);(inp = fopen("outName","w"))==NULL;scanf("%s",outName)){printf("Connot open %s for input\n",outName);printf("Re-enter file name > ");} // 实现逐个字符读写for( ch = getc(inp); ch != EOF; ch = getc(inp))// 一直读到文件尾{putc(ch,outp);// 输出到文件}// 关闭文件fclose(inp);fclose(outp);printf("Copied %s to %s.\n", inName, outName);return 0;}
图示
二进制文件
输入文本时,人按键,以为是输入了对应的符号,但本质上是,ASCII键值,对应到机器中是二进制编码;当文本文件存储时,程序要用资源来将文本字符流转为二进制,这才是它在内存中的存在形式;当读取时,程序要用资源来将二进制再转为文本字符流,这是人可以读懂的显示形式;而scanf和printf就是来完成这些功能的 字符,数字,符号整数浮点数 尾数指数 为避免不必要的转来转去,可以直接使用二进制进行存取文件操作更高效率的文件操作
直接通过程序产生二进制文件再直接将文件中的各个数据项的计算机内部表示形式存储在文件中FILE *bfp;int i;// 打开文件bfp = fopen("nums.bin","wb");// 写文件:将500内的偶数存入for(i=0;i<=500;i+=2){fwrite(&i, sizeof(int), 1, bfp);// 块方式,一次写一个整数[的存储空间大小],即4个字节}// 关闭文件fclose(bfp);
二进制的优缺点
优点: 高效在操作double时,不用担心在文本操作时转化为字符串时精度上的丢失二进制无格式,操作统一 缺点:在一台计算机上产生的二进制文件,在另一种型号的计算机上,几乎无法读取!!!所以xml和JSON大行其道啊如果觉得《2007-C语言-文本文件和二进制文件的处理》对你有帮助,请点赞、收藏,并留下你的观点哦!