C++文件流操作文件流操作所谓文件,一般指存在外部介质上的数据的集合。根据数据组织形式,C++将其分为 文本文件和二进制文件。 文本文件又称ASCII文件,它的每个字节存放一个ASCII码。 代表一个字符,在内存和外设上的文件流传输需要经过类型转换,将内存中的值转换为 对应的ASCII码,再存放到外设中。 二进制文件,则是把内存中的数据,按其在内存中的存储形式原样写到磁盘上存放,不 作任何转换。 ASCII编码格式的用:fstream ifstream ofstream 类处理 Unicode编码格式的用:wfstream wifstream wofstream类处理 文件流的基本操作:1、打开文件 2、读取数据 3、处理数据 4、数据写回 5、关闭文件 一、打开文件 实质:在内存中建立起一个数据结构,该结构与文件相对应,包括文件的名称 、起始位置、大小、当前读写位置等。 用文件流类打开文件有两种方式:1、调用类的构造函数 2、调用成员函数open 1、构造函数的种类 所有的文件流类都有两个版本的构造函数 fstream的构造函数 fstream(); explicit fstream(const char * filename, ios_base::openmode mode=ios_base::in|ios_base::out); ifstream的构造函数 ifstream(); explicit ifstream(const char * filename, ios_base::openmode mode=ios_base::in); ofstream的构造函数 ofstream(); explicit ofstream(const char * filename, ios_base::openmode mode=ios_base::out); 注: 带参数的是直接打开目标文件(只可处理该文件,不可替换打开其它文件) 不带参数的意味着目标文件还没有确定,可以使用open函数指定,open 参数表与上面的参数表相同, 打开新文件之前,需要执行close关闭原来的文件,否则open会调用返回失败。 文件流对象.fali( );测试是否打开成功。 2、打开方式
注:新的C++类库,不再提供 nocreate noreplace,可使用“ | ”,来组合打开方式 而且只有binary 才能指定是二进制文件。 二、数据操作(读取,处理,写回) 1、格式化读写(或者称直接文本读写,使用 << >> 直接读取和写入普通字符) 一般用于默认打式方式(文本文件打开方式)的处理,如: 输出文件流对象<<”Hello World!”;这面的终端是文件,而不是屏幕 输入文件流对象>>var; 将文件中的文本读取到变量var中。 这里是按文本格式输入输出,中间有格式的转换。 2、无格式读写 istream中定义的成员函数 int get(char c);每次读取一个字节(字符) read(char * buff , int len);每次读取len个字节(字符)到buff中 ostream中定义的成员函数 int put(char c);每次向文件写入一个字节(字符) wirte(const char * buff , int len );每次向文件写入buff中前len个字节(字符) 有多个重载版本。 三、文件流的状态判断 1、检测文件结束 函数原型: int eof(); 如果返回0,则表示到了文件流尾。 2、文件是否成功打开 bool is_open();如果返回true,则表示成功打开 3、文件流的状态 有4种基本状态,四个静态数据成员
同一般数据流的操作一样,文件流也可以通过调用相应的函数来判断是否处于某种状态。 例如: eof()——检测———>ios_base::badbit fail()————检测————>ios_base::failbit或ios_base::badbit good()————检测————>
注意:当用同一个文件流对象处理不同的文件时,需要清除前一个文件操作留下的状态值,使用clear();,否则在后面处理时进行状态判断会导致意外的结果。 四、重定位文件读写位置 类istream提供了3个成员函数来对读指针进行操作 tellg(); 返回输入文件读指针的当前位置 seekg(文件中的位置); 将输入文件中读指针移到指定的位置 seekg(位移量,参照位置); 以参照位置为基准移动若干字节 类ostream提供了3个成员函数来对写指针进行操作 tellp(); 返回输出文件写指针的当前位置 seekp(文件中的位置); 将输出文件中写指针移动指定的位置 seekp(位移量,参照位置); 以参照位置为基准移动若干字节 注:文件中的位置和位移量 都是long型整数,以字节为单位, 参照位置可以是下面三者之一: ios::beg 文件开头 ios::cur 文件指针当前位置 ios::end 文件末尾 如果位移量为正,则向后,为负则向前。 如果是fstream对象,则可以任意使用这些函数。 五、关闭文件 成员函数: close(); 测试程序:
|
|
来自: WUCANADA > 《c plus plus》