• C++的文件操作


    1、文本文件

        程序运行时产生的数据属于临时数据,当程序运行结束后将被释放。如果将数据保存在文件内则可以将数据持久化。

        C++对文件的操作需要包含头文件<fstream>。

        文件类型分为两种:

    (1)文本文件:文件以文本的ASCII码形式存储在计算机中

    (2)二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。

    文件的三种操作:

    1、ofstream:写操作

    2、ifstream:读操作

    3、fstream:读写操作

    写文件

    写文件的步骤:

    1、包含头文件 #include<fstream>

    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

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. using namespace std;
    4. //文本文件 写文件
    5. void test01()
    6. {
    7. //2、创建流对象
    8. ofstream ofs;
    9. //3、指定打开方式
    10. ofs.open("text.txt",ios::out); //写文件:不指定路径的话,文件将被创建在程序所在目录
    11. //4、往文件中写内容
    12. ofs << "姓名:张三" << endl;
    13. ofs << "性别:男" << endl;
    14. ofs << "年龄:18" << endl;
    15. //5、关闭文件
    16. ofs.close();
    17. }
    18. int main()
    19. {
    20. test01();
    21. }

    总结:

    1、文件操作必须包含头文件fstream

    2、读文件可以用ofstream,或者fstream类

    3、打开文件时需要指定操作文件的路径以及打开方式

    4、利用<<可以向文件中写数据

    5、操作完毕要关闭文件

    读文件

    步骤与写文件比较相似。步骤如下:

    1、包含头文件 #include<fstream>

    2、创建流对象 ifstream ifs;

    3、打开文件并判断文件是否打开成功 ifs.open(“文件路径”,打开方式);

    4、读数据(4种方式)

    5、关闭文件 ifs.close();

    方法1:使用字符数组作为缓存,输出文件内容。使用右移运算符读出数据。

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. //文本文件 读文件
    6. int test01()
    7. {
    8. //2、创建流对象
    9. ifstream ifs;
    10. //3、打开文件并判断是否打开成功
    11. ifs.open("text.txt",ios::in);
    12. if (!ifs.is_open())
    13. {
    14. cout << "文件打开失败" << endl;
    15. return 0;
    16. }
    17. //4、读数据
    18. 第一种方法:用一个字符数组保存读出的数据
    19. char buf[1024] = { 0 };
    20. while (ifs>>buf) //一行一行读入数据
    21. {
    22. cout << buf << endl;
    23. }
    24. //5、关闭文件
    25. ifs.close();
    26. }
    27. int main()
    28. {
    29. test01();
    30. }

    方法2:使用字符数组作为缓存,输出文件内容。使用getline函数读出数据。

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. //文本文件 读文件
    6. int test01()
    7. {
    8. //2、创建流对象
    9. ifstream ifs;
    10. //3、打开文件并判断是否打开成功
    11. ifs.open("text.txt",ios::in);
    12. if (!ifs.is_open())
    13. {
    14. cout << "文件打开失败" << endl;
    15. return 0;
    16. }
    17. //4、读数据
    18. //第二种方法:用一个字符数组保存读出的数据
    19. char buf[1024] = { 0 };
    20. while (ifs.getline(buf,sizeof(buf))) //一行一行读入数据
    21. {
    22. cout << buf << endl;
    23. }
    24. //5、关闭文件
    25. ifs.close();
    26. }
    27. int main()
    28. {
    29. test01();
    30. }

    方法3:使用字符串类型输出数据,使用getline函数判断输入是否结束。

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. //文本文件 读文件
    6. int test01()
    7. {
    8. //2、创建流对象
    9. ifstream ifs;
    10. //3、打开文件并判断是否打开成功
    11. ifs.open("text.txt",ios::in);
    12. if (!ifs.is_open())
    13. {
    14. cout << "文件打开失败" << endl;
    15. return 0;
    16. }
    17. //4、读数据
    18. //第三种方法:用一个字符串保存读出的数据
    19. string buf;
    20. while (getline(ifs,buf)) //一行一行读入数据
    21. {
    22. cout << buf << endl;
    23. }
    24. //5、关闭文件
    25. ifs.close();
    26. }
    27. int main()
    28. {
    29. test01();
    30. }

    方法4:使用字符作为缓存,输出一个个字符,使用EOF判断是否到达文件结尾。

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. //文本文件 读文件
    6. int test01()
    7. {
    8. //2、创建流对象
    9. ifstream ifs;
    10. //3、打开文件并判断是否打开成功
    11. ifs.open("text.txt",ios::in);
    12. if (!ifs.is_open())
    13. {
    14. cout << "文件打开失败" << endl;
    15. return 0;
    16. }
    17. //4、读数据
    18. //第四种方法:逐字符读,效率较低
    19. char c;
    20. while ((c = ifs.get())!=EOF) //EOF是文件尾部的标志
    21. {
    22. cout << c << endl;
    23. }
    24. //5、关闭文件
    25. ifs.close();
    26. }
    27. int main()
    28. {
    29. test01();
    30. }

    总结:

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

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

    Close关闭文件

    2、二进制文件

    以二进制的方式对文件进行读写操作,打开方式主要为iso::binary。

    写文件

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

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

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

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. class Person {
    6. public:
    7. char m_Name[64];
    8. int m_Age;
    9. };
    10. void test01()
    11. {
    12. //2、创建流对象
    13. ofstream ofs;
    14. //3、打开文件
    15. ofs.open("person.txt", ios::out | ios::binary);
    16. //4、写文件
    17. Person p = {"张三", 18};
    18. ofs.write((const char*)&p, sizeof(Person));
    19. //5、关闭文件
    20. ofs.close();
    21. }
    22. int main()
    23. {
    24. test01();
    25. }

    读文件

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

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

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

    1. #include<iostream>
    2. #include<fstream> //1、包含头文件
    3. #include<string>
    4. using namespace std;
    5. class Person {
    6. public:
    7. char m_Name[64];
    8. int m_Age;
    9. };
    10. void test01()
    11. {
    12. //2、创建流对象
    13. ifstream ifs;
    14. //3、打开文件,判断是否打开成功
    15. ifs.open("person.txt", ios::in | ios::binary);
    16. if (!ifs.is_open())
    17. {
    18. cout << "文件打开失败" << endl;
    19. return;
    20. }
    21. //4、读文件
    22. Person p;
    23. ifs.read((char*)&p, sizeof(Person));
    24. cout << "姓名: " << p.m_Name << endl;
    25. cout << "年龄: " << p.m_Age << endl;
    26. //5、关闭文件
    27. ifs.close();
    28. }
    29. int main()
    30. {
    31. test01();
    32. }
  • 相关阅读:
    [附源码]Python计算机毕业设计电子工厂进销存管理系统
    MYSQL8.0 WITH RECURSIVE递归查询
    Bigder:自动化测试工程师
    【Android】使用SeekBar控制数据的滚动
    CSS首字母下沉怎么设置?
    C++设计模式之外观模式(结构型模式)
    Multi-Graph Fusion Networks for Urban Region Embedding
    【JavaEE】一文掌握 Ajax
    操作系统(六)| 文件系统下 文件使用 共享 保护
    R语言中如何查看已安装的R包
  • 原文地址:https://blog.csdn.net/Lao_tan/article/details/125426980