• 40.【C++最全文件操作,少一个你打我】


    (一)、什么是文件:

    在这里插入图片描述

    文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位。文件的操作是基于文件,即文件的操作核心就是:读和写。也就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应用程序对文件的读写操作转换成集体的硬盘指令(比如控制盘片转动,控制机械手臂移动,以此来读取数据)。

    (二)、为什么要有文件

    内存无法永久保存数据,但凡我们想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作

    (三)、文件操作的三个步骤

    ofstream (写文件),ifstream(读文件),frsream(读写操作)
    
    • 1

    (四)、I/O流的注意思想和简单思想

    在这里插入图片描述

    1.易混易迷点:

    (1).要在E盘建立一个文件,在c++中E通e.
    
    (2).输出流 ofstream,输入流ifstream(读取)
    
    (3).打开文件,流对象.open()
    
    (4).关闭文件,流对象.close().
    
    (5).输入就是从磁盘上的文件中读取内容到内存中。并非cin【硬盘到内存】
    
    (6).输出就是将内存中的数据内容输出或则说写入到磁盘的文件中。【内存到硬盘】
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.输出在文档上(但运行窗口不会有):

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
        string s1="123";
        ofstream of;     //定义输出流;
        of.open("e:\\123.txt");
        of << "输入的字符串是:"<<s1 << endl;
        of.close();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    效果展示:

    在这里插入图片描述

    3.输入内存的操作

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     string s1="2000";
     ofstream of; //定义输出流;
     ifstream If; //定义只读取文件;
     of.open("e:\\123.txt");
     of << "利用ofstream的字符串是:" << s1 << endl; //被读取的文件
     of.close();
     If.open("e:\\123.txt");
     s1 = "888";
     If >> s1; //读取文档123.txt到s1
     cout<< "读取123.txt的文件是:" << s1 << endl;     
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    效果展示:

    在这里插入图片描述

    (五)、frstream对文件的综合管理

    1.代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     string s1 = "41235";
     fstream IO; //定义输入输出流的综合体;
     IO.open("e:\\123.txt");
     IO << "IO输出的字符串是:" << s1 << endl;
     IO.close();
     IO.open("e:\\123.txt");
     s1 = "12354";
     IO >> s1; //读取文档123.txt;
     cout << "读取的文件是:" << s1 << endl;
     IO.close();
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.效果展示:

    在这里插入图片描述
    在这里插入图片描述

    (六)、文件的打开

    在这里插入图片描述

    1.文件名

                       路径+文件主干名+文件后缀
    
    • 1

    2.文件打开方式:

    在这里插入图片描述

    3.判断文件是否打开

    3.1第一种方法:

                  判断   流对象.open()
    
    • 1

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     string s1="123";
     ofstream of;     
     of.open("e:\\123.txt");  
     if (!of.is_open())
     {
      cout << "文件打开失败:" << endl;
     }
     cout << "文件打开成功!" << endl;
     of << "输出到硬盘的数为::"<<s1 << endl;
     of.close();
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    效果展示:

    在这里插入图片描述

    3.2第二种方法:

     判断流对象(!of)
    
    • 1

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     string s1="123";
     ofstream of;     
     of.open("e:\\123.txt");  
     if (!of) //利用流对象进行判断
     {
      cout << "打开文件失败" << endl;
     }
     cout << "成功打开文件:" << endl;
     of << "输出到硬盘的数为::"<<s1 << endl;
     of.close();
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    效果展示:

    在这里插入图片描述

    (七)、文件的写入与读出

    1.二进制的写入:

    在这里插入图片描述

    write(const char* str,int n)str是 字符指针或字符 数组,
    用来存放一个字符串。n是int型数,它用来表示输出显示字符串中字符的个数。
    
    • 1
    • 2

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     ofstream of;
     of.open("e:\\123.txt");
     of << 1000 << endl;
     of << "hello 硬盘!" << endl;
     of.put('Ys'); //写操作中put()函数,只能向硬盘中输出一个,
     int var = 12345;
     of.write((const char*)&var, sizeof(int)); //char*并不是指的字符串,而是指的地址,在这边要强行转换(地址,长度)
     of.close();
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    效果展示:

    在这里插入图片描述

    2.二进制的读出:

             memset(清除的数组,清楚为多少,数组的原来缓存区)函数,
             read(char* dst, streamsize count);
    
    • 1
    • 2

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     ofstream of;
     of.open("e:\\123.txt");
     of << 2000<< endl;
     of << "helloworld" << endl;
     of.put('Y'); //写操作中put()函数,只能向硬盘中输出一个,
     int var = 12345;
     of.write((const char*)&var, sizeof(int)); //char*并不是指的字符串,而是指的地址,在这边要强行转换(地址,长度)
     of.close();
     ifstream If;
     If.open("e://123.txt");
     //int va = 12345;
     //If >> va; // >>读出整形
     //cout << "硬盘到内存的数据为:" << va<
     //char s[100] = {0};
     //If >> s;
     //cout << s << endl; // 读出字符串
     //char ch;                                       
     //ch=If.get(); //这个读出来的是换行,没显示
     //ch = If.get();
     //cout << "读出的put字符是:" << ch << endl;
     char s[100] = { 0 };
     If.getline( s,sizeof(s));
     cout << s << endl;
     memset(s, 0, sizeof(s)); //memset(清除的数组,清楚为多少,数组的原来缓存区)函数,
     If.getline(s, sizeof(s));
     cout << s << endl;
     memset(s, 0, sizeof(s));
     int va = 1235;
     If.read((char*) & va, sizeof(int));
     cout << "通过二进制读出的数据为:" << va<<endl;
     If.close();
     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

    效果展示:

    在这里插入图片描述

    3.put()函数对字符的输出

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     ofstream of;     
     of.open("e:\\123.txt");  
     of << 1000 << endl;
     of << "hello 硬盘!" << endl;
     of.put('Ys'); //写操作中put()函数,只能向硬盘中输出一个,
     of.close();
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    效果展示:

    在这里插入图片描述

    4.get()函数对字符的输入

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     ofstream of;
     of.open("e:\\123.txt");
     of << 2000<< endl;
     of << "helloworld" << endl;
     of.put('Y'); //写操作中put()函数,只能向硬盘中输出一个,
     int var = 12345;
     of.write((const char*)&var, sizeof(int)); //char*并不是指的字符串,而是指的地址,在这边要强行转换(地址,长度)
     of.close();
     ifstream If;
     If.open("e://123.txt");
      int va = 12345;
     If >> va; // >>读出整形
     cout << "硬盘到内存的数据为:" << va<<endl;
     char s[100] = {0};
     If >> s;
     cout << s << endl; // 读出字符串
     char ch;                                       
     ch=If.get(); //这个读出来的是换行,没显示
     ch = If.get();
     cout << "读出的put字符是:" << ch << endl;
     If.close();
     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

    效果展示:

    在这里插入图片描述

    5.getline()函数的输入

    代码展示:

    #include 
    using namespace std;
    #include 
    #include 
    int main()
    {
     ofstream of;
     of.open("e:\\123.txt");
     of << 2000<< endl;
     of << "helloworld" << endl;
     of.put('Y'); //写操作中put()函数,只能向硬盘中输出一个,
     int var = 12345;
     of.write((const char*)&var, sizeof(int)); //char*并不是指的字符串,而是指的地址,在这边要强行转换(地址,长度)
     of.close();
     ifstream If;
     If.open("e://123.txt");
     char s[100] = { 0 };
     If.getline( s,sizeof(s));
     cout << s << endl;
     memset(s, 0, sizeof(s)); //memset(清除的数组,清楚为多少,数组的原来缓存区)函数,
     If.getline(s, sizeof(s));
     cout << s << endl;
     memset(s, 0, sizeof(s));
     If.close();
     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

    效果展示:

    在这里插入图片描述

    制作不易!!!!! 谢谢支持!!!!!
    在这里插入图片描述

  • 相关阅读:
    PHP 同城服务共享茶室小程序系统是如何实现的?
    Redis的安装与基本使用
    社群运营管理主题之社群管理价值
    检测docker内存状态脚本
    linux 解压缩命令tar
    【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列
    maven
    统信UOS操作系统 VS 银河麒麟操作系统
    CobaltStrike4.8--云服务器搭建
    从低代码的前世今生,看软件开发趋势
  • 原文地址:https://blog.csdn.net/qq_69683957/article/details/126344817