• C++的文件操作


    文件操作

    程序运行时产生的数据都属于临时数据,通过文件可将数据持久化

    C++中对文件操作需要包含头文件

    文件类型分为两种:

    1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中
    2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

    操作文件的三大类:

    1. ofstream: 写操作
    2. ifstream: 读操作
    3. fstream: 读写操作
    文本文件
    写文件

    步骤:

    1. 包含头文件

    #include

    1. 创建流对象

    ofstream ofs;

    1. 打开文件

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

    1. 写数据

    ofs<<"写入数据";

    1. 关闭文件

    ofs.close();

    文件打开方式

    注意:文件打开方式可以配合使用,利用 | 操作符

    例如:用二进制方式写文件 ios:: binary | ios:: out

    1. void test01()
    2. {
    3. ofstream ofs;
    4. ofs.open("test.txt", ios::out);
    5. ofs << "名字:" << "哈哈" << endl;
    6. ofs << "性别:" << "男" << endl;
    7. ofs << "年龄:" << "18" << endl;
    8. }

    读文件

    读文件步骤如下:

    1. 包含头文件

    #include

    1. 创建流对象

    ifstream ifs;

    1. 打开文件并判断文件是否打开成功

    ifs.open("文件路径", 打开文件);

    1. 读数据

    四种方式读取

    1. 关闭文件

    ifs.close();

    读文件可以利用ifstream,或者fstream类

    利用is_open函数可以判断文件是否打开成功

    close关闭文件

    注意:读数据方式3中getline(ifs, buf)需要引用头文件#include

    1. void test02()
    2. {
    3. ifstream ifs;
    4. //打开文件
    5. ifs.open("test.txt", ios::in);
    6. //判断文件是否打开成功
    7. if (!ifs.is_open())
    8. {
    9. cout << "读取文件失败!" << endl;
    10. return;
    11. }
    12. //读数据
    13. //方式1
    14. /*char buf[1024] = { 0 };
    15. while (ifs >> buf)
    16. {
    17. cout << buf << endl;
    18. }*/
    19. //方式2
    20. /*char buf[1024] = { 0 };
    21. while (ifs.getline(buf, 1024))
    22. {
    23. cout << buf << endl;
    24. }*/
    25. //方式3
    26. string buf;
    27. while (getline(ifs, buf))
    28. {
    29. cout << buf << endl;
    30. }
    31. //方式4
    32. char c;
    33. while ((c = ifs.get()) != EOF) //end of file
    34. {
    35. cout << c;
    36. }
    37. //关闭文件
    38. ifs.close();
    39. }
    二进制文件
    写文件

    二进制写文件主要利用流对象调用成员函数write

    函数原型:ostream& write(const char* buffer, int len);

    参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数

    1. class Person
    2. {
    3. public:
    4. char m_Name[64];
    5. int m_Age;
    6. };
    7. void test01()
    8. {
    9. //打开文件方式1
    10. /*ofstream ofs;
    11. ofs.open("person.txt", ios::out | ios::binary);*/
    12. //打开文件方式2
    13. ofstream ofs("person.txt", ios::out | ios::binary);
    14. //写文件
    15. Person p = { "张三", 18 };
    16. ofs.write((const char*)&p, sizeof(Person));
    17. //关闭文件
    18. ofs.close();
    19. }
    读文件

    二进制方式读文件主要利用流对象调用成员函数read

    函数原型:istream& read(char *buffer, int len);

    参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

    1. class Person
    2. {
    3. public:
    4. char m_Name[64];
    5. int m_Age;
    6. };
    7. void test02()
    8. {
    9. ifstream ifs;
    10. ifs.open("person.txt", ios::in | ios::binary);
    11. if (!ifs.is_open())
    12. {
    13. cout << "打开文件失败!" << endl;
    14. return;
    15. }
    16. Person p;
    17. ifs.read((char*)&p, sizeof(Person));
    18. cout << "姓名:" << p.m_Name << ", 年龄:" << p.m_Age << endl;
    19. ifs.close();
    20. }
  • 相关阅读:
    docker部署单机版elasticsearch+kibana可视化管理页面
    从零开发一款相机 第五篇:Camera api1实现预览、拍照、录像功能
    快速解决“msvcp110.dll丢失”问题,msvcp110.dll丢失修复分享
    探索设计模式:观察者模式
    Android13 下拉菜单栏中添加快捷截图按钮
    虚拟机zeppelin安装
    Rust之包,箱和模块管理(四):用use关键字引用其他包
    从尤雨溪微博募捐,思考开源如何赚大钱
    如何在Spring JDBC 中获取自动生成的 ID
    油猴插件安装以及好用的脚本推荐
  • 原文地址:https://blog.csdn.net/ThePaK/article/details/133222408