• 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. }
  • 相关阅读:
    传输层协议 - TCP(Transmission Control Protocol)
    控制台中查看莫格命令的详细信息
    tcp checksum 0xffff instead of 0x0000 see rfc 1624
    想跳槽?你先看看(MQ、ZK、Nginx、Kafk)等分布式技术你都会吗?
    【每日一题】ARC158B - Sum-Product Ratio | 数学 | 中等
    Is Null和Is Not Null
    FlyFish开发者说|开源低代码平台的体验与思考
    AMD CPU
    通过对比3PL和4PL,来了解什么是4PL
    [附源码]Python计算机毕业设计Django公共台账管理系统
  • 原文地址:https://blog.csdn.net/ThePaK/article/details/133222408