如果熟悉汇编可能会发现这种方式和汇编语言的DOS功能调用句柄式文件操作很像,比如open()就像DOS服务的3CH号功能调用,其实这种操作还有两种类型的函数就是直接用DOS功能来完成的,如_open(),_dos_open()等等。有兴趣可自已查询BCB的帮助。　同流式文件操作相同,这种也提供了Unicode字符操作的函数,如_wopen()等等,用于9X/NT下的宽字符编程,有兴趣可自已查询BCB的帮助。　另外,此种操作还有lock(),unlock(),locking()等用于多用户操作的函数,但在BCB中用得并不多,我就不介绍了,但如果要用C来写CGI,这些就必要的常识了,如果你有这方面的要求,那就得自已好好看帮助了。　在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O　,stream这个类有两个重要的运算符:　1、插入器(<<)　向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write　Stdout"<<''\n'';就表示把字符串"Write　Stdout"和换行字符(''\n'')输出到标准输出流。　2、析取器(>>)　从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。　在C++中,对文件的操作是通过stream的子类fstream(file　stream)来实现的　,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。　一、打开文件　在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:　void　open(const　char*　filename,int　mode,int　access);　参数:　filename:　要打开的文件名　mode:　要打开文件的方式　access:　打开文件的属性　打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:　ios::app:　以追加的方式打开文件　ios::ate:　文件打开后定位到文件尾,ios:app就包含有此属性　ios::binary:　以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文　ios::in:　文件以输入方式打开　ios::out:　文件以输出方式打开　ios::nocreate:　不建立文件,所以文件不存在时打开失败　ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败　ios::trunc:　如果文件存在,把文件长度设为0　可以用“或”把以上属性连接起来,如ios::out|ios::binary　打开文件的属性取值是:　0:普通文件,打开访问　1:只读文件　2:隐含文件　4:系统文件　可以用“或”或者“+”把以上属性连接起来　,如3或1|2就是以只读和隐含属性打开文件　。　例如:以二进制输入方式打开文件c:\config.sys　fstream　file1;　file1.open("c:\\config.sys",ios::binary|ios::in,0);　如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:　file1.open("c:\\config.sys");<=>file1.open("c:\\config.sys",ios::in|ios::out,0);　另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:　fstream　file1("c:\\config.sys");　特别提出的是,　fstream有两个子类:ifstream(input　file　stream)和ofstream(outpu　file　stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件　。　ifstream　file2("c:\\pdos.def");//以输入方式打开文件　ofstream　file3("c:\\x.123");//以输出方式打开文件　所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。　二、关闭文件　打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。　三、读写文件　读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式　1、文本文件的读写　文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:　file2<<"I　Love　You";//向文件写入字符串"I　Love　You"　int　I;　file1>>I;//从文件输入一个整数值。　这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些　操纵符　功能　输入/输出　dec　格式化为十进制数值数据　输入和输出　endl　输出一个换行符并刷新此流　输出　ends　输出一个空字符　输出　hex　格式化为十六进制数值数据　输入和输出　oct　格式化为八进制数值数据　输入和输出　setpxecision(int　p)　设置浮点数的精度位数　输出　比如要把123当作十六进制输出:file1<>运算符只能进行文本文件的读写操作,用于二进制文件可能会产生错误。经常和read配合使用的函数是gcount(),用来获得实际读取的字节数。使用eof()函数检测文件是否读结束,使用gcount()获得实际读取的字节数。　下面附上对二进制文件操作部分代码示例　/*　有个学生的数据,要求:把它们存到磁盘文件中;将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;将2第个学生的数据修改后存回磁盘文件中的原有位置。从磁盘文件读入修改后的个学生的数据并显示出来。