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

目录

  • 目录
  • 前言
  • 文件IO
    • 文件流类和文件流对象
    • C普通文件输入输出操作
    • C二进制文件输入输出操作
  • 总结

前言

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

文件I/O

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

文件流类和文件流对象

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

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

#include 
#include 
#include 

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

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 
#include 
#include 

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》下载地址。

你可能感兴趣的:(c++)