C++面向对象-27-读写文本文件

       前面学习了多态,现在我们开始学习一些C++的武器,也就是一些常用的类库。程序在运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化,也就是把数据写入文件,叫序列化,程序读取文件,显示出各种数据。这个过程叫反序列化。这篇开始我们来学习下C++如何读写文件。

1.文件分文本文件和二进制文件
1)文本文件,文件以文本的ASCII码形式存储在计算机中
2)二进制文件,文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。(都是01这样的数据)

 

2.C++操作文件的三大类
1.ofstream:写操作,outputStream
2.ifstream: 读操作 inputStream, f表示file
3.fstream: 读写操作

 

3.写文本文件的5个步骤
1)包含头文件
#include <fstream>
2) 创建流对象
 ofstream ofs;
3) 打开文件
  ofs.open("文件路径", 打开方式);
4)写数据
  ofs << "写入数据";
5)关闭文件流
   ofs.close();

下面这个表格,统计了各种打开方式

上面的打开方式可以结合一起使用,例如 ios::ate | ios::binary

使用管道符连接多个打开方式。

 

下面来写一个写文本文件的代码,例如就test.txt吧

#include <iostream>
#include <fstream>
using namespace std;

void test01()
{
    //2.创建流对象
    ofstream ofs;
    
    //3.打开流文件
    ofs.open("test.txt", ios::ate | ios::out);

    //4.写入文件
    ofs << "这是写入文件练习";

    //5.关闭流对象
    ofs.close();
}

int main()
{

    test01();
    system("pause");
    return 0;
}

运行结果

 

4.读文本文件

读文件的步骤如下
1.包含头文件
#include <fstream>

2.创建流对象
 ifstream ifs;

3.打开文件并判断文件是否打开成功
 ifs.open("文件路径", 打开方式);

4.读数据
 四种方式读取
 
5. 关闭文件
  ifs.close()

这次我们要读文件的内容如下

 

相关代码

#include <iostream>
#include <fstream>
using namespace std;

void test01()
{
    //2.创建流对象
    ifstream ifs;
    
    //3.打开流文件
    ifs.open("test.txt", ios::in);
    //判断文件是否打开成功
    if( !ifs.is_open())
    {
        cout << "打开文件失败!" << endl;
        return;
    }

    //4.读文件,第一种方法
    char buf[1024] = {0};
    while (ifs >> buf)
    {
        cout << buf << endl;
    }
    
    //5.关闭流对象
    ifs.close();
}

int main()
{
    test01();
    system("pause");
    return 0;
}

运行结果

上面介绍了第一种读文件,大致原理是,先初始化一个大小为1024的字节数组,然后读取一行就存入buf字节数组。

再来看看其他三种读文件的方法(剩下代码都相同)

     //4.读文件,第二种方法
    char buf[1024] = {0};
    while (ifs.getline(buf, 1024))
    {
        cout << buf << endl;
    } 

第三种,使用字符串方法

    //4.读文件,第三种方法
    string buf;
    while (getline(ifs, buf))
    {
        cout << buf << endl;
    } 
    

第四种

    //4. 读文件,第四种,不推荐
    char c;
    while ( (c = ifs.get()) != EOF)  // EOF: end of file
    {
        cout << c;
    }

第四种,这里不推荐,效率很慢。原理是一次只读取一个字符,存到c,然后判断是否读到文件结束位置,EOF就是一个标记位置。这里读取一个字符,打印出一个字符,其中换行也是一个字符。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章