在平时写程序时,程序员经常要用到IO操作,用的最多的一般是与控制台进行交互(标准的输入输出),但往往也需要对已命名的文件进行读写操作。本文主要分析C语言对文件操作的支持,在以后的文章中再另外分析C++中标准的IO库。(2010-3-26 wcdj)
[磁盘文件数据存储方式]
实际上,文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。文件通常分为二进制文件和文本文件。二进制文件是包含在ASCII及扩展ASCII字符中编写的数据或程序指令的文件。一般是可执行文件(exe)、图形、图像、声音等文件。而文本文件(通常也成为ASCII文件),它的每一字节存放的是可表示为一个字符的ASCII代码的文件。这里把文件区分为二进制文件和文本文件,但实际上它们都是以二进制数据的方式来存储的。文本文件里所存储的每一个字节都可以转化为一个可读的字符。譬如'a','b',但在内存中并不会存储'a','b',而是存储它们的ASCII码:61h和62h。
[请勿混淆]
在计算机中所有文件都是二进制的。所谓文本,Unicode都是编码方式,按某种编码方式读出来的时候才产生的不同。
数据就是数据,关键看你怎么使用了,如果说区别,就是文本文件载入的时候,会把回车/r换行/n,2个符号转换成回车/n符号,而吃掉换行符/r,存盘的时候把这个吃掉的换行符再吐回去。至于也可以把文本文件当初数据文件来读,纯粹是看应用了。就好比有人问10进制,16进制的区别,纯粹就是一回事。
二进制文件和文本文件都是数据,只不过看问题的角度不同而已,他们都是一样的。好比'1',你用文本文件看是'1',你用16进制工具看是0x31,实际上都是0x31,或者是0011 0001(十进制49)。
从文件系统的角度,所有的文件都是一个顺序的比特集合,区别在于程序如何解读这些数据,一段数据可以看成是文本,图像或者声音。
[C语言对文件操作的支持]
在C语言中,对于文件的操作都是利用FILE结构体来进行的。包括文件的打开、文件的读写、文件的关闭、文件指针的定位等。
[一道基本的对文件操作的例子]
[Reference]