c++文件操作

目录

1.文本文件

1.1写文件

1.1.1相对路径写文件

1.1.2绝对路径写文件

1.2读文件

2.二进制文件

2.1写文件

2.2读文件

1.文本文件

1.1写文件

1.1.1相对路径写文件

#include<iostream>
using namespace std;
#include<fstream>//头文件
//文本文件 写文件
void test01()
{
    //1.包含头文件 fstream

    //2.创建流对象
    ofstream ofs;//我起的名字是ofs,名字无所谓,随便起
    //o-output 写,f-file 文件

    //3.指定打开方式
    ofs.open("text.txt", ios::out);
    //不指定路径,默认和项目的路径一致,项目保存在哪,这个文件就保存在哪
    //4.写内容
    ofs << "姓名:张三" << endl;//换行
    ofs << "性别:男" << endl;
    ofs << "年龄:18" << endl;

    //5.关闭文件
    ofs.close();
}
int main()
{
    test01();
    system("pause");//按任意键继续
    return 0;
}

1.1.2绝对路径写文件

C\C++编程中:相对路径+绝对路径 - 学习随笔记 - 博客园

#include<iostream>
using namespace std;
#include<fstream>//头文件
//文本文件 写文件
void test01()
{
    //1.包含头文件 fstream

    //2.创建流对象
    ofstream ofs;//我起的名字是ofs,名字无所谓,随便起
    //o-output 写,f-file 文件

    //3.指定打开方式
    //在D:\zhouj\Documents\Visual Studio test下建立text2.txt写法
    ofs.open("D:\\zhouj\\Documents\\Visual Studio test\\text2.txt", ios::out);
   //注意是两个\\
    //4.写数据
    ofs << "使用绝对路径写文件" << endl;
    //5.关闭文件
    ofs.close();
}
int main()
{
    test01();
    system("pause");//按任意键继续
    return 0;
}

1.2读文件

#include<iostream>
using namespace std;
#include<fstream>//头文件
#include<string>
//文本文件 读文件
void test01()
{
    //1.包含头文件<fstream>

    //2.创建流对象
    ifstream ifss;//名字随便起
    //i-input,f-file
    //3.打开文件 并且判断是否打开成功
    ifss.open("text.txt", ios::in);
    //ifss.is_open();//是否打开,打开成功返回真,打开失败返回假
    
    if (!ifss.is_open())//等价于 if(ifss.is_open() == 0)
    {
        cout << "文件打开失败" << endl;
        return;//打开失败不在往下进行
    }
    //4.读数据

    //第一种
    //这里的第一种方法是按照字符串为单位读取,以空格为分隔
    //不会读换行符
    /*
    cout << "第一种读法" << endl;
    char buf[1024] = { 0 };//自己起的数组大小,字符串
    //不懂的可以看https://blog.csdn.net/qq_37891604/article/details/127990980
    while (ifss >> buf)//一行一行的读,读到末尾,返回假,自动跳出循环
    {
        cout << buf << endl;
    }
    */
    //第一次就读完了,光标就在文件尾了,读不了第二次,所以需要把第一次注释了读第二次
    
    /*
    cout << "-----------------------" << endl;
    cout << "第二种读法" << endl;
    //一行一行的读有空格也没事
    char buf2[1024]={0};
    while (ifss.getline(buf2,sizeof(buf2)))
    {
        //一行一行的读,行里有空格没事
        //换完一行就输出,但是不会读换行符,所以需要自己加endl
        cout << buf2 << endl;
    }
    */
    
    /*
    cout << "-----------------------" << endl;
    cout << "第三种读法" << endl;
    string buf3;
    while (getline(ifss,buf3))//需要加string的头文件
    {
        //一行一行的读,行里有空格没事
        //换完一行就输出,但是不会读换行符,所以需要自己加endl
        cout << buf3 << endl;
    }
    */
    cout << "-----------------------" << endl;
    cout << "第四种读法" << endl;
    char c;
    //get() 每次读一个字符
    while ((c=ifss.get())!=EOF)//!=EOF,就是没有读到文件尾就一直读,EOF end of file
    {
        //将读的字符放到c里
        cout << c;
        //会读换行符,不需要自己加endl
    }
    //5.关闭文件
    ifss.close();
}
int main()
{
    
    test01();
    system("pause");//按任意键继续
    return 0;
}

2.二进制文件

2.1写文件

#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 写文件
class Person
{
public:
    char m_Name[64];//姓名
    int m_Age;//年龄
};
void test01()
{
    //1.包含头文件<fstream>

    //2.创建流对象
    ofstream ofs("person.txt", ios::out | ios::binary);
    //3.打开文件
    //ofs.open("person.txt", ios::out | ios::binary);
    
    //4.写文件
    Person p{ "张三", 18 };//像结构体赋值,结构体和类差不多,第一次见,记住叭
    //C++中的结构体和类的唯一区别是访问权限和模板,
    //结构体赋值的语法就是这样写的,因此类也能这样赋值
    ofs.write((const char*)&p,sizeof(Person));
    //(const char*)&p,对p取地址,返回的应该是Person*,强转成const char*
    // 但是这个函数是需要const char*
    //5.关闭文件
    ofs.close();
}

int main()
{
    
    test01();
    system("pause");//按任意键继续
    return 0;
}

2.2读文件

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

//二进制文件 读文件
class Person
{
public:
    char m_Name[64];
    int m_Age;
};
void test01()
{
    //1.包含头文件<fstream>
    //2.创建流对象
    ifstream ifs;
    //3.打开文件 判断文件是否打开成功
    ifs.open("person.txt", ios::in | ios::binary);

    if (!ifs.is_open())
    {
        cout << "文件打开失败" << endl;
        return;//文件打开失败就不读了,就return掉
    }
    //4.读文件
    Person p;
    ifs.read((char*)&p, sizeof(Person));
    cout << "姓名:" << p.m_Name<<" "<< "年龄:" << p.m_Age << endl;
    //5.关闭文件
    ifs.close();
}
int main()
{
    
    test01();
    system("pause");//按任意键继续
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值