• 文件操作 黑马教程(04)


    1.文本文件 写文件

    #include "iostream"
    #include "fstream"
    using namespace std;
    /*
     * 文件操作
     *
     * 程序运行时产生的数据都属于临时数据,程序一旦结束都会被释放
     * 通过文件可以将数据持久化
     * C++中对文件操作需要包含头文件
     *
     * 文件类型分为两种:
     * 文本文件:文件以文本的ASCII码形式存储在计算机中
     * 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们
     *
     * 操作文件的三大类:
     *      1.ofstream:写操作
     *      2.ifstream:读操作
     *      3.fstream:读写操作
     *
     * 写文件:
     *      1.包含头文件 #include
     *      2.创建流对象 ofstream ofs;
     *      3.打开文件 ofs.open("文件路径",打开方式);
     *      4.写数据 ofs<<"写入的数据";
     *      5.关闭文件 ofs.close();
     *
     * 文件打开方式:
     *      ios::in      为读文件而打开文件
     *      ios::out     为写文件而打开文件
     *      ios::ate     初始位置:文件尾
     *      ios::app     追加方式写文件
     *      ios::trunc   如果文件存在先删除,再创建
     *      ios::binary  二进制方式
     *      注意:文件打开方式可以配合使用,利用|操作符
     *      例如:用二进制方式写文件 ios:binary|ios:out
     *
     */
    
    //文本文件 写文件
    void test01(){
        //1.包含头文件
        //2.创建流对象
        ofstream ofs;
        //3.指定打开的方式
        ofs.open("test.txt",ios::out);
        //4.王文件中写内容
        ofs<<"姓名:张三"<<endl;
        ofs<<"性别:男"<<endl;
        ofs<<"年龄:18"<<endl;
        //5.关闭文件
        ofs.close();
    }
    
    int main() {
        test01();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    2.文本文件 写文件

    #include "iostream"
    #include "fstream"
    
    using namespace std;
    
    /*
     * 读文件
     *
     * 读文件和写文件步骤相似
     */
    void test01() {
        ifstream ifs;
        ifs.open("test.txt", ios::in);
        bool boolTemp = ifs.is_open();
        if (!boolTemp) {
            cout << "文件打开失败" << endl;
            return;
        }
    
        //4.读数据
        //第一种
    //    char buf[1024]={0};
    //    while(ifs>>buf){
    //        cout<
    //    }
    
    //    //第二种
    //    string buf;
    //    while(getline(ifs,buf)){
    //        cout<
    //    }
    
        //第三种
        char c;
        while ((c = ifs.get()) != EOF) { //EOF 文件结果尾部的标志
            cout << c;
        }
        //5.关闭文件
        ifs.close();
    }
    
    int main() {
        test01();
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    3.二进制文件 读写

    #include "iostream"
    
    using namespace std;
    
    #include "fstream"
    
    /*
     * 二进制读写文件
     *
     * 二进制方式文件主要利用流对象调用成员函数 write
     * 函数原型 ostream & write(const char * buffer,int len)
     */
    
    class Person {
    public:
        char m_Name[64]; //姓名
        int m_Age; //年龄
    };
    
    void test01() {
        //1.头文件
        //2.创建流对象
        ofstream ofs;
        //3.打开文件
        ofs.open("person.txt", ios::out | ios::binary);
        //4.写文件
        Person p = {"张三", 19};
        ofs.write((const char *) &p, sizeof(p));
        //5.关闭文件
        ofs.close();
    }
    
    //读文件
    void test02() {
        //1.头文件
        //2.创建流对象
        ifstream ifs;
        //3.打开文件
        ifs.open("person.txt", ios::in | ios::binary);
        //4.写文件
        if (!ifs.is_open()) {
            cout << "文件打开失败" << endl;
            return;
        }
        Person p;
        ifs.read((char *) &p, sizeof(p));
        cout << "姓名:" << p.m_Name << ";年龄:" << p.m_Age << endl;
        //5.关闭文件
        ifs.close();
    };
    
    int main() {
        test01();
        test02();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    架构与思维:了解Http 和 Https的区别(图文详解)
    B-Spline for SLAM
    C/C++ sscanf正则测试
    4款值得推荐的AI辅助编程工具(支持C#语言)
    记录错误 Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract
    NPU上PyTorch模型训练问题案例
    前端需要的免费在线api接口
    .NET Conf China 2023 活动纪实 抢先看
    链表——反转链表
    如何使用 CSS 为 SVG 制作动画:示例教程
  • 原文地址:https://blog.csdn.net/minyeling/article/details/132631120