C文件
来源:互联网 发布:阿里云服务器攻击 编辑:程序博客网 时间:2024/05/22 17:01
文件:文件是存储在磁盘上的数据结合
分类:文本文件和二进制文件
1. 文本文件ASI文件文本文件一个文件存放一个ASIC字符,也就是一个字节
10000其实也是存放了5个字节的文件,这样的文件方便读取数据,但是这样的文件占的
外存空间比较大,而且在读取在内存中的时候需要将他转换成二进制文件,这样是比较耗费时间的
2. 二进制文件实际上存放的是文件在内存中存储样式,10000在tubc中只占两个字节,所以存储空间较少
所以,计算机中的文件一般都是使用二进制文件来存储的。
磁盘文件:一些数据放在磁盘文件里面需要的时候再输入到内存里面,所以就需要磁盘文件
操作系统对输入输出设备的管理是按照文件的方式来管理的,即输入文件和输出文件
文件缓存区:输入缓存区和输出缓存区
流:标准输入流、标准输出流、错误输出流
流的常用的输出方式有、行缓冲、无缓冲
行缓冲就是现将数据放在缓冲区内,等到输入指定的输出符的时候,数据开始输出到显示器。
就像scanf就是输出了换行的时候才表示输出结束一样
输出文件缓存区
程序数据区(内存)《-------------------》磁盘
输入文件缓存区
系统为每个文件设置了一个位置指针,所以文件指针不是指向了数据的地址,而是指向了文件的位置。
文件三个部分:文件路劲+文件名的主干+文件名的后缀
操作函数:
Fopen("filename","mode") 返回值是一个文件类型的指针
fgetc(FILE *fp) 返回值是文件中的一个字符
fgets(char *buff, int buff_size, FILE *fp)这个时候不需要再带上返回值
feof(FILE *fp)返回值是文件类型的指针,到了文件结束(文件流未EOF)的时候,指针指向空
fclose(FILE *fp)关闭文件,一般不会去使用它的返回值
fputc(char ch, FILE *fp)向文件里面写入一个字符
#include<stdio. h> #define FILE_NAME "temp.c" int main(void) { FILE *fp; char ch; // Open file fp = fopen(FILE_NAME, "r"); if(fp==NULL){ perror("main"); return -1; } // Read char while(1){ ch = fgetc(fp); // End of file if(feof(fp)){ break; } printf("%c", ch); } // Close file fclose(fp); return 0; }
值得一提的是我们为什么要将打印输出放在最后一步,feof是在fgets或者fgetc之后采取检测文件流是否标志FEOF
如果我们是在前面去检测他的话,那就会出现一个问题,那就是
最后一次读取之后,文件没有结束,buf缓冲区的内容为最后读取的数据,
然后再次进入循环,这个读取数据失败了,但是缓冲区里面的数据还是会输出出来,再下面判断失败才会跳出程序
也就是说这样的话,最后的一个数据会连续输出两次。
而对于fgetc,读取失败之后,他是则是直接返回了一个不可以打印的值,放在缓冲区里面
- c文件
- C文件
- C文件
- C文件
- C文件
- C文件
- *.c~文件
- c 文件
- 写文件(C/C++)
- [C/C++]文件操作
- 【C/C++】文件读写
- C/C++/ 文件
- C/C++:拷贝文件
- [C/C++] 头文件一览
- C/C++/Window 文件操作
- 读取csv文件(C#,C++)
- 【C/C++】C++文件操作
- 【C/C++】C++读入文件
- Opencv贴图的两种方式
- input链接新页面
- 我的征途是星辰大海
- 建立高效人际关系的五大方法
- Military Phonetic Alphabet
- C文件
- c++ std::getline
- ccf+在于枚举时h的巧妙
- 从薪资800一路爬到月薪过万,全靠这6条
- WPF布局学习总结
- 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- 【扫盲】什么是Redis
- JAVA虚拟机(4)笔记
- Dos命令初阶--文件拷贝