c++文件操作

文件类型

1、文本文件(文件以ASCLL码的形式存储在计算机上)

2、二进制文件(文件以文本二进制形式存在计算机,大部分看不懂)

c++对文件操作要包含头文件<fstream>

操作文件三大类

1、ofstream:写操作
2、ifstream: 读操作
3、fstream:读写操作

文本文件的写入

步骤如下:

1、包含头文件

        #include<fstream>

2、创建流对象

         ofstream ofs;(ofs为变量名随便起)

3、打开文件

        ofs.open("文件路径",打开方式);

4、写数据

        ofs<<"写出的数据";(和cout<<这个东东差不多,一个往控制台输出一个是往文件里输出,<<这个别搞混了就行

5、关闭文件

文件打开方式

 1e6bd20060ac4fe5a6a3785d0074e0e2.png

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    ofstream ofs;//创建流对象
    
    ofs.open("text.txt",ios::out);//在cpp文件夹下创建了一个text文本文件;
    
    //直接和控制台输出一样的格式
    ofs<<"123"<<endl;
    ofs<<"456"<<endl;
    
    ofs.close();//关闭文件
    return 0;
}

 e5aa046d6ae94b1297e364d83a83e581.png

 如果打开方式是iOS::out他每次都是覆盖以前的文件,而不能接着以前文件写入。如果想接着以前文件写入,需要把ios::out换成(ios::out|ios::app)这样就可以了。

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    ofstream ofs;//创建流对象
    
    ofs.open("text.txt",ios::out|ios::app);//在cpp文件夹下创建了一个text文本文件;
    
    //直接和控制台输出一样的格式
    ofs<<"123"<<endl;
    ofs<<"456"<<endl;
    
    ofs.close();//关闭文件
    return 0;
}

5b6a822a976d4b0abf7bee5fd1b6d0dd.png

这是又运行一次结果。

文件的读取 

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    fstream ifs;//创建流对象

    ifs.open("text.txt", ios::in);//读取文件要变成ios::in

    string a;
    while (ifs >> a)
        cout << a << endl;

    ifs.close();//关闭文件
    return 0;
}

把刚刚的文件读一下 

f5d5c37835ae4595b85b8e21b976b3ec.png

 当然如果本生不存在这个文件你就读不了了,所以我们要加一个函数判断有没有这个文件

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    fstream ifs;//创建流对象

    ifs.open("text.txt", ios::in);//读取文件要变成ios::in
    
    if (ifs.is_open())//打开成功返回true
    {
        string a;
        while (ifs >> a)
            cout << a << endl;

        ifs.close();//关闭文件
    }
    else cout << "打开失败" << endl;
    return 0;
}

 我把text文件后加了个1很显然没有这个文件

78c87a63b2ac44e4ab684c3258fdbdda.png

 如果文件格式是这样的

 2c244d8ca4014ecb9b71514e1091a1b1.png

 那就这样读

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    fstream ifs;//创建流对象

    ifs.open("text1.txt", ios::in);//读取文件要变成ios::in
    
    if (ifs.is_open())
    {
        string a;
        int b;
        while (ifs >> a >> b)
            cout << a << b << endl;

        ifs.close();//关闭文件
    }
    else cout << "打开失败" << endl;
    return 0;
}

38f263d44058476aaa81b56a5e799eb5.png

这样就成功了,注意有时候中文汉字读取出会有乱码,这个问题有的私下问我就行。

二进制文件 

1、写

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    ofstream ofs;//创建流对象

    ofs.open("text.txt", ios::out|ios::binary);/写文件要变成ios::out然后加上后面那个

    string a="张三";
    ofs.write((const char*)&a, sizeof(a));//需要用到write函数 第一个参数是一个const char *的类型第二个是大小
    ofs.close();
    return 0;
}

f8bce211967347c9b6886e1ae1e3b87b.png

2、读

#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
    ifstream ifs;//创建流对象
    ifs.open("text.txt", ios::in | ios::binary);//读取文件要变成ios::in
    if (!ifs.is_open()) return 0;//打开失败
    char a[100];
    ifs.read(a, sizeof(a));//用到read函数第一个是char *的类型
    cout << a << endl;
    ifs.close();
    return 0;
}

ea040335e68e40239d420c33bd969744.png

 最后,建议二进制文件用char 的数组少用string ,string有一些不确定的因素。

有错误欢迎指出

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DyingLive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值