zoukankan      html  css  js  c++  java
  • C++文件流打开标识符.RP

    ofstream流,以ios::app打开(或者“ios::app|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。
    以ios::app|ios::in打开,不管有没有文件,都是失败。
    以ios::ate打开(或者”ios::ate|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么清空该文件
    以ios::ate|ios::in打开,如果没有文件,那么打开失败;如果有文件,那么定位到文件尾,并可以写文件,但是不能读文件

    ifstream流,以ios::app打开(“ios::app|ios::out”),不管有没有文件,打开都是失败。
    以ios::ate打开(“ios::ate|ios::out”),如果没有文件,打开失败
    如果有文件,打开成功,并定位到文件尾,但是不能写文件


    fstream流,默认是ios::in,所以如果没有文件,ios::app和ios::ate都是失败,
    以ios::app|ios::out,如果没有文件则创建文件,如果有文件,则在文件尾追加
    以ios::ate|ios::out打开,如果没有文件则创建文件,如果有,则清空文件。
    以ios::ate|ios::out|ios::in打开,如果没有文件,则打开失败,有文件则定位到文件尾

    可见:ios::app不能用来打开输入流,即不能和ios::in相配合
    而ios::ate可以和ios::in配合,此时定位到文件尾;如果没有ios::in相配合而只是同ios::out配合,那么将清空原文件
    (ios::ate|ios::in-->在原文件尾追加内容;ios::ate--->清空原文件,ios::out是默认必带的,可加上也可不加,对程序无影响)
    可以在《C++ 输入输出流及本地化》1.4.2中找到更详细的描述:(大意)以ios::app方式打开文件,即使修改文件指针,也只能输出到文件尾。实际上以ios::app打开的文件的写入,和文件指针五关。
    (这里就指出了ate和app的关键区别,app只能在尾部追加,ate可以配合指针修改文件中的部分内容。)
    奇怪的是:《C++ 输入输出流及本地化》和《C++编程思想》都说以ios::ate打开的文件,文件指针都会定位到文件尾且不清空文件,但是我发现ios::ate如果不和ios::in配合的话,将清空原文件。

    文自:http://chengchuange.blog.163.com/blog/static/1798164232014827984347/

  • 相关阅读:
    c语言:猴子吃桃问题
    c语言:输入任意数求该数的阶乘
    (整理三)高并发架构思路,附十万定时任务执行解决方案
    (整理4)RPC服务和HTTP服务简单说明
    .NET Core和Swagger 生成 Api 文档转
    (整理二)读取大日志文件
    (整理一)理解分布式事务,高并发下分布式事务的解决方案-附索引的利弊
    2016年结
    2013年结
    2017年结
  • 原文地址:https://www.cnblogs.com/Leroscox/p/6131670.html
Copyright © 2011-2022 走看看