预备知识:
二进制数据:数据以二进制形式表示。例如:字符a的二进制表示为01100001.整数12的二进制表示为00000110.
文本数据:指的是数据以字符的形式表示。例如字符a的文本形式为01100001.整数12的文本表示为00000001 00000010.
1.文本文件和二进制文件是根据对数据的不同存储方式来划分的,例如:
当要存储12到文件中时,12在内存中的存储形式为0000 0110,如果以二进制文件存储,则直接在硬盘某处存储0000 0110.如果以文本文件存储时,其先将12转换为文本数据格式(字符),然后再存储在硬盘相关位置,则硬盘存储结果为 0000 0001 0000 0010.
2.用记事本打开文本文件时可以显示相关的字符序列,但是打开二进制文件时是乱码的原因:
记事本也就是一个应用程序,此程序对txt文件的读取规则是直接将硬盘相关数据读入内存,然后以字符形成呈现。当硬盘以字符形式存储时,则显示的便是硬盘存储的对应的字符数据。当硬盘存储的是二进制文件时,其显示时仍然按照字符序列显示,自然出现乱码(也是字符,只是这些字符没有意义)。
3.c和c++对文件的操作都使用到了缓冲区,读文件实际读的是缓冲区数据,写文件是写入数据到缓冲区,而缓冲区与硬盘之间的操作是由系统完成的。
具体来说,当读文件时,从缓冲区读取数据,缓冲区没有数据时,操作系统便从文件中加载一段数据到缓冲区,然后再继续读操作。当写文件时,像缓冲区写入数据,当缓冲区满时,系统将缓冲区数据写入硬盘中。然后缓冲区继续接受数据。
4.控制台读写数据也是通过缓冲区进行的,当读入数据时,从缓冲区读入,如果缓冲区为空,就接受用户输入数据并把数据写到缓冲区中,再进行读操作。当输出数据时,也是将数据先输出到缓冲区,不过使用cout等时,其将数据t输出到缓冲区的同时,对缓冲区刷新(缓冲区数据显示到屏幕上)。
C语言对文件操作相关过程:
c语言中FILE结构体的结构为:
c++对文件的操作用到了fstream对象