• 20240422,C++文件操作


    停电一天之后,今天还有什么理由不学习呜呜……还是没怎么学习

    目录

    一,文件操作

    1.1 文本文件

    1.1.1  写文件

    1.1.2  读文件

    1.2 二进制文件

    1.2.1 写文件

    1.2.2 读文件

    一,文件操作

    文件操作可以将数据持久化,对文件操作时须包含头文件
    两种文件类型:文本文件:文件以文本的ASCII码形式存储;二进制文件:文件以文本的二进制形式存储
    操作文件三大类:ofstream 写操作;ifsream读操作, fstream读写操作

    1.1 文本文件
    1.1.1  写文件

    包含头文件:#include ——创建流对象:ofs.open("文件路径”,打开方式);——写数据:ofs<<"写入的数据">>;——关闭文件:ofs.close();
    打开方式 :
    ios::in   为读文件而打开文件
    ios::out   为写文件而打开文件
    ios::ate   初始位置:文件尾
    ios::app   追加方式写文件
    ios::trunc   如果文件存在先删除,再创建
    ios::binary   二进制方式

    注意:|  操作符,配合使用文件打开方式,IOS::BINARY | IOS::OUT——用二进制方式写文件;未指定完整文件夹路径,默认和源文件一起?

    1. #include <iostream>
    2. #include <fstream>
    3. using namespace std;
    4. void test01() {
    5. //创建流对象
    6. ofstream ofs;
    7. //指定打开方式 “文件路径”,打开方式
    8. ofs.open("test.txt", ios::out);
    9. //写内容
    10. ofs << "姓名 :张三" << endl;
    11. ofs << "性别:男" << endl;
    12. ofs << "年龄:18" << endl;
    13. //关文件
    14. ofs.close();
    15. }
    16. int main() {
    17. test01();
    18. system("pause");
    19. return 0;
    20. }
    1.1.2  读文件

    包含头文件:#include ——创建流对象:ifstream ifs——打开并判断文件是否打开成功 ifs .open ("文件路径",打开方式)——读数据【四种方式读取】——关闭文件 ifs.close();

    字符数组while (ifs >> buff)        字符数组while (ifs.getline(buff2, sizeof(buff2)))
    字符串【这里不可以省略】while (getline (ifs,buff3))     单个字符while ((c = ifs.get()) != EOF)

    1. #include <iostream>
    2. #include<string>
    3. #include <fstream>
    4. using namespace std;
    5. void test01() {
    6. ifstream ifs;
    7. ifs.open("test.txt", ios::in);
    8. if (!ifs.is_open()) { //is_open(),bool类型,!取反
    9. cout << "文件打开失败" << endl;
    10. return; //失败不继续进行
    11. }
    12. //读数据 第一种 输出上比其他多了一个换行符,不懂
    13. char buff[1024] = { 0 };//字符数组
    14. while (ifs >> buff) { //文件写入BUFF,没有数据的时候循环结束
    15. cout << buff << endl;
    16. }
    17. //第二种
    18. //char buff2[1024] = { 0 };
    19. //while (ifs.getline(buff2, sizeof(buff2))) {//GETLINE获取一行,char*,首地址,count最多读几个字节数【数组大小】
    20. // cout << buff2 << endl;
    21. //}//都不注释也只输出一次,不懂
    22. //第三种
    23. //string buff3;
    24. 基础的输入流,GETLINE基础的输入流,需要输入流对象IFS,准备好的字符串
    25. //while (getline (ifs,buff3)) { //未定义标识符getline?不懂
    26. // cout << buff3 << endl;
    27. //}//失败——加上<string>头文件
    28. //第四种,C,不常用,效率低
    29. /*char c;
    30. while ((c = ifs.get()) != EOF) {
    31. cout << c;
    32. }*/
    33. ifs.close();
    34. }
    35. int main() {
    36. test01();
    37. system("pause");
    38. return 0;
    39. }
    1.2 二进制文件

    打开要指定为ios::binary   

    1.2.1 写文件

    二进制写文件主要利用流对象调用成员函数WRITE,函数原型:ostream& write ( const char* buffer,int len);解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数
    二进制读入的文件会乱码,只要正确读入就不影响

    1. #include <iostream>
    2. #include<string>
    3. #include <fstream>
    4. using namespace std;
    5. class Person {
    6. public:
    7. char m_Name[64];//尽量用C的字符数组,STRING容易出现问题
    8. int m_Age;
    9. };
    10. void test01() {
    11. ofstream ofs;
    12. //打开头文件
    13. ofs.open("person.txt", ios::out | ios::binary);
    14. Person p = { "王五",78 };
    15. //对P取地址返回Person性质的地址,强制转换成CHAR*
    16. ofs.write((const char*)&p, sizeof(Person));
    17. ofs.close();
    18. }
    19. int main() {
    20. test01();
    21. system("pause");
    22. return 0;
    23. }
    1.2.2 读文件

    二进制读文件主要利用流对象调用成员函数READ,函数原型:istream& read ( const char* buffer,int len);解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数

    1. #include <iostream>
    2. #include<string>
    3. #include <fstream>
    4. using namespace std;
    5. class Person {
    6. public:
    7. char m_Name[64];//尽量用C的字符数组,STRING容易出现问题
    8. int m_Age;
    9. };
    10. void test01() {
    11. ifstream ofs;
    12. //打开头文件
    13. ofs.open("person.txt", ios::in | ios::binary);
    14. if (!ofs.is_open()) {
    15. cout << "打开失败" << endl;
    16. return;
    17. }
    18. //读文件
    19. Person p;
    20. ofs.read((char*)&p, sizeof(Person));
    21. //输出数据
    22. cout << "姓名:" << p.m_Name << "\t年龄:" <<p.m_Age<< endl;
    23. ofs.close();
    24. }
    25. int main() {
    26. test01();
    27. system("pause");
    28. return 0;
    29. }

  • 相关阅读:
    CRC校验原理及实现
    AI更改视频语言的神奇网址:让郭德纲讲英语成为现实!
    【Python 实战基础】如何修改表格数据类型DataFrame列的顺序
    go WriteFile文件追加写入(适合小文件)
    在React中传递onFocus事件的参数
    K8S知识点(三)
    算法刷题day31
    BFS:FloodFill算法
    resultmap
    【Python深度学习】目标检测和语义分割的区别
  • 原文地址:https://blog.csdn.net/qq_51583806/article/details/138067987