fstream之seekp/seekg/ios::ate/ios::app

在程序开发中,IO处理无处不在,经常会在代码中遇到特殊的IO处理需求

1、描述

需求:如果文件不存在则创建,存在则打开,然后先读取文件的末行,然后在文件末尾写入。

代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char **argv)
{
    fstream fst;
    string strTemp;
    fst.open("test3", ios::in | ios::out);
    //fst.seekp(0, fstream::beg);
    while (!fst.eof())
    {
        getline(fst, strTemp);
        cout << strTemp << endl;
    }
    cout << strTemp;

    fst.seekg(0, fstream::end);
    fst << "\nhhfdsfds";
    fst.close();
    return 0;
}

因为fstream对象是作为读写同时打开的,在读和写转换之间,会使流失效,这个具体还要去参考《标准C++输入输出流与本地化》这本书。

2、ios::ate/ios::app的区别

ios::ate是使文件打开时将文件读取位置移动到文件尾

ios::app是打开文件并在文件尾部添加数据

3、seekp/seekg的区别

seekp是指设置输入流的文件读取位置,对应读取输入流的文件读取位置为tellp

seekg是指设置输出流的文件插入位置,对应读取输出流的文件插入位置为tellg

 

posted @ 2014-12-24 13:57  冷冰若水  阅读(825)  评论(0编辑  收藏  举报