• fstream


    其实两个都是C++文件流的分支,在C++有一个stream这个类,所有的I/O都以这个“流”类为基础的,也就是他的子类。

    首先来说fstream吧!
    在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
    void open(const char* filename,int mode,int access);
    参数:
    filename: 要打开的文件名
    mode: 要打开文件的方式
    access: 打开文件的属性
    打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
    ios::app: 以追加的方式打开文件
    ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
    ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
    ios::in: 文件以输入方式打开
    ios::out: 文件以输出方式打开
    ios::nocreate: 不建立文件,所以文件不存在时打开失败
    ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
    ios::trunc: 如果文件存在,把文件长度设为0
    可以用“或”把以上属性连接起来,如ios::out|ios::binary
    打开文件的属性取值是:
    0:普通文件,打开访问
    1:只读文件
    2:隐含文件
    4:系统文件
    可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。
    例如:以二进制输入方式打开文件c:config.sys
    fstream file1;
    file1.open("c:config.sys",ios::binary|ios::in,0);
    如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
    file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);
    另外,fstream还有和open()一样的构造函数,对于上例,在定义的时候就可以打开文件了:
    fstream file1("c:config.sys");
    特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
    ifstream file2("c:pdos.def");//以输入方式打开文件
    ofstream file3("c:x.123");//以输出方式打开文件
    所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。
    二、关闭文件
    打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。
    三、读写文件
    读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
    1、文本文件的读写
    文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:
    file2<<"I Love You";//向文件写入字符串"I Love You"
    int i;
    file1>>i;//从文件输入一个整数值。
    这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些
    操纵符 功能 输入/输出
    dec 格式化为十进制数值数据 输入和输出
    endl 输出一个换行符并刷新此流 输出
    ends 输出一个空字符 输出
    hex 格式化为十六进制数值数据 输入和输出
    oct 格式化为八进制数值数据 输入和输出
    setpxecision(int p) 设置浮点数的精度位数 输出
    比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。

    然后再来说说sstream类:
    其实他与fstream类的用法十分相似,只不过把输入输出的目标由文件改为了字符串;
    istringstream:
    Creates a type basic_istringstream specialized on a char template parameter.

    ostringstream:
    Creates a type basic_ostringstream specialized on a char template parameter.

    stringbuf:
    Creates a type basic_stringbuf specialized on a char template parameter.

    stringstream:
    Creates a type basic_stringstream specialized on a char template parameter.

    wistringstream:
    Creates a type basic_istringstream specialized on a wchar_t template parameter.

    wostringstream:
    Creates a type basic_ostringstream specialized on a wchar_t template parameter.

    wstringbuf:
    Creates a type basic_stringbuf specialized on a wchar_t template parameter.

    wstringstream:
    Creates a type basic_stringstream specialized on a wchar_t template parameter.

    以下是一个小例子,看看是不是理解:将num中的数字输入到bob这个我们定义的字符串读写流中,然后再将bob输出到字符串str中:
    int num;
    stringstream bob;
    bob << num;
    string suzzy(bob.str());
  • 相关阅读:
    03-链表
    23-自定义用户模型
    01-使用pipenv管理项目环境
    10-多线程、多进程和线程池编程
    17-Python执行JS代码--PyExecJS、PyV8、Js2Py
    09-Python-Socket编程
    08-迭代器和生成器
    07-元类编程
    06-对象引用、可变性和垃圾回收
    05-深入python的set和dict
  • 原文地址:https://www.cnblogs.com/herizai/p/3075629.html
Copyright © 2020-2023  润新知