fstream类总结

- ofstream, ifstream, fstream

    在头文件fstream中,在fstream类中,用open成员函数打开文件,实现类与文件的关联操作。

    - open(filename, mode, prot):对所属类进行用指定的参数进行特定的文件关联

              几种打开方式(mode)(这些方式可以用 '|' 组合起来)

ios::in

打开输入()文件

ios::out

打开输出()文件

ios::ate

初始位置为文件尾

ios::app

所有写入附加在文件末尾

ios::trunc

如果所操作的文件已经存在了,就先删除

ios::binary

以二进制打开

             打开文件的属性(prot)(这些方式可以用'+'进行组合,这个参数可以省略不传)

0

普通文件,打开操作

1

只读文件

2

隐含文件

4

系统文件

    - close():用来关闭文件,是文件重新变为可访问,对象流也可以打开其他文件了

 

 1 #include <fstream>
 2 using namespace std;
 3 int main ()
 4 {
 5     ofstream fw, fw1;
 6     
 7     fw.open("test.txt");
 8     fw1.open("test1.txt");
 9     
10     fw.close();
11     fw1.close();
12     
13     return 0;
14 }

 

  - 读写: 使用重载的'<<' 或者 '>>', 也可以使用成员函数来实现

 1 #include <fstream>
 2 using namespace std;
 3 
 4 int main ()
 5 {
 6     ifstream fr;
 7     ofstream fw;
 8     char word[200], line[200];
 9     
10     fw.open("write.txt");
11     fr.open("read.txt");
12     
13     fr  >> word;    //读取文件,一个单词
14     fr.getline (line, 100);        //读取一行内容
15     
16     fw << "write file test" << endl;
17     
18     fw.close();
19     fr.close();
20     
21     return 0;
22 }

 

  - 判断文件状态

    is_open():文件是否正常打开

    bad():读写过程中是否出错(操作对象没有打开,写入的设备没有空间)

    fail():读写过程中是否出错(操作对象没有打开,写入的设备没有空间,格式错误--比如读入类型不匹配)

    eof():读文件到达文件末尾,返回true

    good():以上任何一个返回true,这个就返回false

  - 获得和设置流指针

    - 对于所有的输入输出流都有至少一个指针,指向下一个要操作的位置

      ofstream  put_point

      ifstream  get_point

      fstream  put_point和get_point

    - 获取流指针位置

      tellg(): 返回输入流指针的位置(返回类型long)

      tellp(): 返回输出流指针的位置(返回类型long)

    - 设置指针位置

      seekg(long  position):  设置输入流指针位置为第position个字符(文件首位置为开始位置)

      seekp(long  position):  设置输出流指针到指定位置

   - 缓存和同步

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。

 

当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

 

        • 当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
        • 当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。
        • 控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。
        • 明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

 

参照博客传送门: 晨雪无痕

 

posted @ 2017-02-22 17:08  罗茜  阅读(15611)  评论(0编辑  收藏  举报