• ios::app与ios::ate的区别


    文件流

    ios::app

    ios::ate

    打开方式

    结果

    打开方式

    结果

    ofstream

    (默认是ios::in | ios::trunc)

    ios::app或ios::app|ios::out

    如果没有文件,生成空文件;

    如果有文件,在文件尾追加

    ios::ate或ios::ate|ios::out

    如果没有文件,生成空文件;

    如果有文件,清空该文件

    ios::app|ios::in

    不管有没有文件,都是失败

    ios::ate|ios::in

    如果没有文件,打开失败;

    如果有文件,定位到文件尾,可以写文件,但是不能读文件

    Ifstream

    (默认是ios::in)

    ios::app或ios::app|ios::out

    不管有没有文件,都是失败

    ios::ate或ios::ate|ios::out

    如果没有文件,打开失败;
    如果有文件,定位到文件尾,但是不能写文件

    ios::app|ios::in

    ?

    ios::ate|ios::in

    ?

    fstream

    (默认是ios::in | ios::out)

    ios::app|ios::out

    如果没有文件,创建文件;

    如果有文件,在文件尾追加

    ios::ate|ios::out

    如果没有文件,创建文件;

    如果有,清空文件

    ios::app|ios::in

    如果没有文件,失败

    ios::ate|ios::in

    如果没有文件,失败

    N/A

    N/A

    ios::ate|ios::out|ios::in

    如果没有文件,打开失败,

    如果有文件,定位到文件尾

    总结

    ios::app不能和ios::in相配合,

    但可以和ios::out配合,打开输入流

    ios::ate可以和ios::in配合,此时定位到文件尾;

    如果没有ios::in相配合而只是同ios::out配合,那么将清空原文件;

    区别

    app会在每次写操作之前都把写指针置于文件末尾,

    而ate模式则只在打开时才将写指针置于文件末尾。在文件操作过程中,可以通过seekp等操作移动指针位置。

    例子:

    多个线程或者进程对一个文件写的时候,假如文件原来的内容是abc

    以ios::app:

    第一个线程(进程)往里面写了个d,第二个线程(进程)写了个e的话,结果是abcde

    以ios:ate:

    后面写的会覆盖前面一个写的,第一个线程(进程)往里面写了个d,第二个线程(进程)写了个e的话,结果为abce

    参考:

    CSDN:ios::app与ios::ate打开方式有什么不同

    ofstream与ate的故事

  • 相关阅读:
    解题报告 百进制数
    解题报告 Loongint 的夜晚
    解题报告 树形图计数
    解题报告 一元三次方程求解
    解题报告 Loongint 的旅行安排
    解题报告 数字查找
    用C++编写简单绘图语言的词法分析器——程序清单
    C++ 连接 mysql 的一个例子(Visual Studio 2005)
    fedora 8 下JDK 6.0 配置
    IBM DB2 V9 常用命令
  • 原文地址:https://www.cnblogs.com/zhcncn/p/2851656.html
Copyright © 2020-2023  润新知