C++输入和输出流(二)——文件输入输出

目录

前言

C++输入和输出流(一)——标准输入输出记录了cincout的一些使用总结。本文记录文件输入输出的一些代码,理论太多了,其实看完代码,大概就可以使用了。

文件I/O

文件输入流:ifstream 文件输出流:ofstream
文件输入输出流:fstream
这些就表示要使用文件输入输出流需要包含的头文件为ifstream.h;ofstream.h;
fstream.h;

文件流类和文件流对象

输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。
和文件有关系的输入输出类主要在fstream.h这个头文件中被定义,在这个头文件中主要被定义了三个类,由这三个类控制对文件的各种输入输出操 作,他们分别是ifstream、ofstream、fstream,其中fstream类是由iostream类派生而来,他们之间的继承关系见下图所示。
1
由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream.h头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。
ifstream类,它是从istream类派生的,用来支持从磁盘文件的输入
ofstream类,它是从ostream类派生的,用来支持向磁盘文件的输出
fstream类,它是从iostream类派生的,用来支持对磁盘文件的输入输出

C++普通文件输入输出操作

#include <iostream>
#include <fstream>
#include <string.h>

// 文件流类和文件流对象
// 输入流用来读文件
// 输出流用来写文件

using namespace std;
int main()
{
    char* fname = "2.txt";
    ofstream fout(fname, ios::app);  // 建一个输出流对象和文件关联 // 默认是ios::out, ios::app表示在打开文件末尾添加内容
    if(!fout)
    {
        cout << "open error" << endl;
        return 0;
    }
//    fout.open(fname);
    fout << "hello... a" << endl;
    fout.close();

    // 读文件
    ifstream fin;
    fin.open(fname, ios::in);   // 默认是ios::in
    char ch;
    while(fin.get(ch))
    {
        cout << ch;
    }
    fin.close();

    return 0;
}

C++二进制文件输入输出操作

#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

// 文件流类和文件流对象
// 输入流用来读文件
// 输出流用来写文件

class Teacher
{
public:
    Teacher()
    {
        age = 33;
        strcpy(name, "");
    }
    Teacher(int age, char* str)
    {
        this->age = age;
        strcpy(name, str);
    }
    void printT()
    {
        cout << "age=" << age << " "
             << "name=" << name << endl;
    }
private:
    int age;
    char name[32];
};

int main()
{
    char* fname = "1.dat";
    ofstream fout(fname, ios::binary);
    if(!fout)
    {
        cout << "open error" << endl;
    }
    Teacher t1(32, "T32");
    Teacher t2(33, "T33");

    fout.write((char*)&t1, sizeof(t1));
    fout.write((char*)&t2, sizeof(t2));

    fout.close();

    ifstream fin(fname);
    Teacher tmp;
    fin.read((char*)&tmp, sizeof(tmp));
    tmp.printT();
    fin.close();

    return 0;
}

总结

其实最经常使用的东西是最好的东西,而且往往是实现起来最复杂使用起来最简单的东西!这样的东西用来学习对自己非常有好处,但是实际使用的话,掌握一些例子,能够快速开发其实就足够了!
附上《传智播客扫地僧c++基础和进阶课堂讲义.docx》下载地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值