C++ 文件操作(文本文件)

打印 上一主题 下一主题

主题 1621|帖子 1621|积分 4863

                    C++中对文件操作需要包含头文件   #include<fstream>     文件类型分为两类:             1. 文本文件:文件以文本对应的   ASCII   码情势存储在计算机中             2. 二进制文件:文件以文本的二进制情势存储在计算机中,用户一 般不能直接读懂        文件的重要操作:                1.    ofstream   :写操作                2.    ifstream   :读操作                3.    fstream   :读写操作
        文本文件

   文件打开方式


          注意:文件打开方式可以配合使用,利用|操作符
          比方:用二进制方式写文件 ios::binary | ios:ut
          写文件

          步调:

           Setp1:包含头文件 #include<fstream>
         Setp2:创建流对象 ofstream ofs;
         Setp3:打开文件 ofs.open("文件路径", 打开方式);
         Setp4:写数据 ofs << "写入的数据";
         Setp5:关闭文件 ofs.close();
  代码示例:

  1. #include<iostream>
  2. //1、包含头文件
  3. #include<fstream>
  4. using namespace std;
  5. //文本文件-写文件
  6. void test01()
  7. {
  8.     //2、创建流对象
  9.     ofstream ofs;
  10.     //3、打开文件,不指定目录的话创建在当前目录下
  11.     ofs.open("test2.txt", ios::out);
  12.     //4、写文件
  13.     ofs << "Name: Trump" << endl;
  14.     ofs << "Sex: Male" << endl;
  15.     ofs << "Age: 80" << endl;
  16.     //5、关闭文件
  17.     ofs.close();
  18. }
  19. int main()
  20. {
  21.     test01();
  22.     return 0;
  23. }
复制代码
        头文件

     #include<fstream>:引入文件流库,该库提供了用于文件输入输出操作的类和函数,是实现文件读写功能的关键。
          test01 函数部门

  1. //文本文件-写文件
  2. void test01()
  3. {
  4.     //2、创建流对象
  5.     ofstream ofs;
  6.     //3、打开文件,不指定目录的话创建在当前目录下
  7.     ofs.open("test2.txt", ios::out);
  8.     //4、写文件
  9.     ofs << "Name: Trump" << endl;
  10.     ofs << "Sex: Male" << endl;
  11.     ofs << "Age: 80" << endl;
  12.     //5、关闭文件
  13.     ofs.close();
  14. }
复制代码
        创建流对象

  1. ofstream ofs;
复制代码
        ofstream 是 fstream 库中用于文件输出操作的类,这里创建了一个 ofstream 类型的对象 ofs,后续将使用它来进行文件写入操作。
          打开文件

  1. ofs.open("test2.txt", ios::out);
复制代码
        open 是 ofstream 类的成员函数,用于打开指定的文件。第一个参数 "test2.txt" 是要打开的文件名,如果该文件不存在,会主动创建;第二个参数 ios:ut 是文件打开模式,表现以输出模式打开文件,即用于写入数据。
          写文件

  1. ofs << "Name: Trump" << endl;
  2. ofs << "Sex: Male" << endl;
  3. ofs << "Age: 80" << endl;
复制代码
        ofs 是之前创建的 ofstream 类型的对象,代表着一个打开的文件输出流
          这里使用了和 cout 类似的 << 运算符,将文本信息写入到文件中。
          注:输出流操作符  "<<"   :在 C++ 里,<< 不但是左移操作符,还能作为输出流操作符使用。当和 cout 搭配时,它把数据输出到控制台;当和文件输出流对象(像 ofstream)搭配时,它把数据写入到文件中
          这里的写入文件方式是从头重新写!!
        就算原来文件里有内容也会被清空!!!
         关闭文件

  1. ofs.close();
复制代码
        close 是 ofstream 类的成员函数用于关闭已打开的文件。关闭文件是一个良好的编程习惯,它可以确保文件中的数据被正确保存,同时释放系统资源
          main函数
  1. int main()
  2. {
  3.     test01();
  4.     return 0;
  5. }
复制代码
        这里调用了 test01 函数,从而实行文件写入操作。末了返回 0 表现程序正常竣事。
  注意事项:
          错误处理:上面例子中没有对文件打开操作进行错误处理,如果文件无法打开(比方磁盘已满、没有权限等),程序大概会出现未界说举动。可以通过检查 open 函数的返回值或者 ofs 对象的状态来进行错误处理
          文件路径如果没有指定文件的绝对路径,文件将被创建在程序的当前工作目录下
  小结

          文件操作必须包含头文件
        写文件可以利用 ofstream,或者 fstream 类
        打开文件时需要指定文件路径以及打开方式
        利用<<可以向文件中写数据
        操作完毕,要关闭文件
  读文件

          读文件与写文件步调类似,但是读取方式更多(此处保举使用第二种)。
          步调

             Setp1:包含头文件                                        #include<fstream>                Setp2:创建流对象                                        ifstream   ifs;                Setp3:打开文件并判断文件是否打开成功    ifs.open("文件路径   ",    打开方式   );                Setp4:读数据                                               四种方式读取                Setp5:关闭文件                                            ifs.close();                                   代码示例

  1. #include<iostream>//1、包含头文件#include<fstream>using namespace std;//文本文件-读文件void test01(){    //2、创建流对象    ifstream ifs;    //3、打开文件,并判断是否打开成功    ifs.open("test1.txt", ios::in);    if (! ifs.is_open())    {        cout << "Failure" << endl;        return;    }    else    {        cout << "File Open Success!" << endl;    }    //4、读文件//    //方法一//    char buf[1024] = {0}; // 创建一个缓冲区////    while (ifs >> buf)//    {//        cout << buf << endl;//    }    //方法二     char buf[1024] = {0};     while (ifs.getline(buf, sizeof(buf)))     {         cout << buf << endl;     }    //方法三(不常用)    // string buf;    // while (getline(ifs, buf))    // {    //     cout << buf << endl;    // }    //方法四(不保举)    // char c;    // while ((c = ifs.get()) != EOF)  //EOF:文件竣事符 end of file    // {    //     cout << c;    // }    //5、关闭文件    ifs.close();}int main()
  2. {
  3.     test01();
  4.     return 0;
  5. }
复制代码
        刚刚提到过的点这里不再赘述。
          创建流对象

  1. ifstream ifs;
复制代码
        ifstream 是 fstream 库中用于文件输入操作的类,这里创建了一个 ifstream 类型的对象 ifs,后续将使用它来进行文件读取操作(不要搞混了,此处是ifstream而不是ofstream)。
          打开文件并检查打开状态

  1. ifs.open("test1.txt", ios::in);
  2. if (! ifs.is_open())
  3. {
  4.     cout << "Failure" << endl;
  5.     return;
  6. }
  7. else
  8. {
  9.     cout << "File Open Success!" << endl;
  10. }
复制代码
        ifs.open("test1.txt", ios::in);:open 是 ifstream 类的成员函数,用于打开指定的文件。第一个参数 "test1.txt" 是要打开的文件名;第二个参数 ios::in 是文件打开模式,表现以读取模式打开文件,即用于读取数据。
    ifs.is_open()用于检查文件是否成功打开。如果文件打开失败,is_open() 返回 false,此时输出 "Failure" 并返回,竣事函数实行;如果打开成功,输出 "File Open Success!"。
          读取文件内容

          方法一

  1. char buf[1024] = {0};
  2. while (ifs >> buf)
  3. {
  4.     cout << buf << endl;
  5. }
复制代码
        该方法读到空格就会换行,没有第二种按整行好(除非标题特殊要求,还是掌握了好)
          char buf[1024] = {0};:创建一个大小为 1024 的字符数组 buf 作为缓冲区(初始化为0)。
    ifs >> buf:使用 >> 操作符从文件输入流 ifs 中读取数据直到碰到空缺字符(如空格、制表符、换行符等)为止,将读取的数据存储到 buf 中。当读取成功时,ifs >> buf 返回 true,继续循环;当读取失败(如到达文件末尾)时,返回 false,竣事循环。
    cout << buf << endl; :将读取到的内容输出到控制台,并换行。
          方法二

  1. char buf[1024] = {0};
  2. while (ifs.getline(buf, sizeof(buf)))
  3. {
  4.     cout << buf << endl;
  5. }
复制代码
        ifs.getline(buf, sizeof(buf)):getline 是 ifstream 类的成员函数,用于从文件输入流中读取一行数据,直到碰到换行符为止,将读取的数据存储到 buf 中sizeof(buf) 表现缓冲区的大小,防止读取的数据超出缓冲区范围。当读取成功时,返回 true,继续循环;当读取失败(如到达文件末尾)时,返回 false,竣事循环。
          这种方法只会读到换行符'\0'之后才会换行,如果是软换行,那么就不会换行。在word中,硬换行是enter键。(下面都一样)
          方法三

  1. string buf;
  2. while (getline(ifs, buf))
  3. {
  4.     cout << buf << endl;
  5. }
复制代码
        string buf;:创建一个 string 类型的对象 buf 用于存储读取的一行数据
    getline(ifs, buf):getline 是尺度库中的函数(与第二种方法中的getline不同),用于从文件输入流 ifs 中读取一行数据将其存储到 buf 中。当读取成功时,返回 true,继续循环;当读取失败(如到达文件末尾)时,返回 false,竣事循环。
          这种方法只会读到换行符'\0'之后才会换行,如果是软换行,那么就不会换行。在word中,硬换行是enter键。
          方法四(不保举)

  1. char c;
  2. while ((c = ifs.get()) != EOF)
  3. {
  4.     cout << c;
  5. }
复制代码
        char c;:创建一个字符变量 c 用于存储每次读取的字符
     ifs.get():get  ifstream 类的成员函数,用于从文件输入流中读取一个字符EOF 是文件竣事符,当读取到文件末尾时,ifs.get() 返回 EOF。
          这种方法只会读到换行符'\0'之后才会换行,如果是软换行,那么就不会换行。在word中,硬换行是enter键。
     cout << c;:将读取到的字符输出到控制台。
          关闭文件

  1. ifs.close();
复制代码
        close  ifstream 类的成员函数,用于关闭已打开的文件。关闭文件是一个良好的编程习惯,它可以确保文件资源被正确释放。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表