zoukankan      html  css  js  c++  java
  • 文件模式

    每个流都有一个关联的文件模式(file mode),用来指出如何使用文件。表8.4列出了文件模式和它们的含义。

    image-20210121180711348

    无论用哪种方式打开文件,我们都可以指定文件模式,调用open打开文件时可以,用一个文件名初始化流来隐式打开文件时也可以。指定文件模式有如下限制∶

    • 只可以对 ofstream 或 fstream 对象设定 out 模式。
    • 只可以对ifstream 或 fstream 对象设定 in 模式。
    • 只有当 out 也被设定时才可设定 trunc 模式。
    • 只要trunc没被设定,就可以设定 app 模式。在app 模式下,即使没有显式指定 out 模式,文件也总是以输出方式被打开。
    • 默认情况下,即使我们没有指定trunc,以out 模式打开的文件也会被截断。为了保留以out 模式打开的文件的内容,我们必须同时指定 app 模式,这样只会将数据追加写到文件末尾;或者同时指定in 模式,即打开文件同时进行读写操作。
    • ate和binary 模式可用于任何类型的文件流对象,且可以与其他任何文件模式组合使用。

    每个文件流类型都定义了一个默认的文件模式,当我们未指定文件模式时,就使用此默认模式。与ifstream关联的文件默认以in 模式打开;与 ofstream关联的文件默认以 out 模式打开;与fstream关联的文件默认以in 和 out 模式打开。

    以out模式打开文件会丢失已有数据

    默认情况下,当我们打开一个 ofstream 时,文件的内容会被丢弃。阻止一个 ofstream 清空给定文件内容的方法是同时指定 app 模式∶

    // 在这几条语句中file1都被截断
    ofstream out("file1");                    // 隐含以输出模式打开文件并截断文件                              
    ofstream out2("file1", ofstream::out);    // 隐含地截断文件
    ofstream out3("file1", ofstream::out | ofstream::trunc);
    // 为保留文件内容,我们必须显式指定app模式
    ofstream app("file2", ofstream::app);    // 隐含为输出模式
    ofstream app2("file2", ofstream::out | ofstream::app);
    

    每次调用open时都会确定文件模式

    对于一个给定的流,每次打开文件时,都可以改变文件模式

    ofstream out;                            // 未指定文件打开模式
    out.open("scratchpad");                  // 模式隐含地设置为输出和截断
    out.close();                             // 关闭out,以便用于其他文件
    out.open("precious", ofstream::app);     // 模式为输出和追加
    out.close();
    

    第一个open调用未显式指定输出模式,文件隐式地以out 模式打开。

    通常情况下,out模式意味着同时使用trunc模式。因此,当前目录下名为scratchpad的文件的内容将被清空。

    当打开名为 precious 的文件时,我们指定了append模式。文件中已有的数据都得以保留,所有写操作都在文件末尾进行。

  • 相关阅读:
    Ubuntu14.04LTS系统QQ的安装:pidgin-lwqq
    Ubuntu14.04LTS系统输入法的安装
    Linux系统安装及初始化(ubuntu14.04)
    创建RAID并永久挂载RAID
    磁盘管理和磁盘配额
    用户账号组账号概述
    安装及管理程序
    目录和文件管理
    Vi编辑器的工作模式
    Linux命令及使用方法
  • 原文地址:https://www.cnblogs.com/lihello/p/14309630.html
Copyright © 2011-2022 走看看