zoukankan      html  css  js  c++  java
  • c++文件流总结(fstream、ofstream、ifstream)

    c++的文件流包含在<fstream>与<iostream>

    其中头文件中fstream包含三种数据类型,

    ofstream   输出文件流,用于创建文件并且向文件中写入数据

    ifstream    输入文件流,用于从文件中读取数据

    fstream    文件流,有读写功能,即是以上两个的综合

    ios::in

    打开文件用于读取。

    ios::out

    打开文件用于写入。

    ios::ate

    文件打开后定位到文件末尾。

    ios::app

    追加模式。所有写入都追加到文件末尾。

    ios::binary

    二进制方式

    ios::trunc

    如果文件已存在则先删除该文件

     一.先介绍几个函数

    1.cin.getline( 参数1 , 参数2 , 参数3 ) ;

    参数1 是即将要写入的对象,参数2 是写入的最大长度,参数3是结束字符。

    参数2和参数3可缺省。

    与getline要区分开,cin.getline服务的是char类型,属于istream流,而getline服务的对象是string类型,是属于string流,两者是不一样的函数。

    getline(参数1,cin)         //  参数1 是要写入的对象。

    2.cin.ignore()   //函数会忽略掉之前读语句所多余的字符。

    二.代码实现

    1. 写入文件,可用ofstream / fstream

      a.  先声明一个ofstream类型

        //    ofstream out;

      b. 将该类型与文件名挂钩

        //    out.open("地址+文件名",参数);  

        //此处参数可多选也可缺省,多选情况例如:out.open(“文件”,in | trunc)

         

       c.  正式写入文件

        //string str;

        //getline1(cin,str);    //读取一行

        //out<<str;              //    将变量str的内容写入文本中

       d. Close关闭

        //out.close();  //关闭与文件联系

     1 #include<iostream>
     2 #include<fstream>
     3 #include<string>
     4 using namespace std;
     5 int main(){
     6 //可将声明与文件联系合在一起: ofstream out("data.txt");
     7     ofstream out; 
     8     out.open("data.txt");
     9     string str;
    10     getline(cin,str);
    11     out<<str;
    12     return 0;
    13 }

     问题:如何面对多行存储。      在windows中: /r/n才是换行,即:out<<str<<"/r/n";

     方案1:

    1     ofstream out; 
    2     out.open("data.txt");
    3     string str;
    4     getline(cin,str);
    5     out<<str<<endl;
    6     
    7     getline(cin,str);
    8     out<<str<<endl;

    方案2:(好像 也可)

    1     ofstream out; 
    2     out.open("data.txt");
    3     string str;
    4     getline(cin,str);
    5     out<<str<<"
    ";
    6     
    7     getline(cin,str);
    8     out<<str<<"
    ";

      2. 读取文件,可用ifstream

        a)       先声明一个ifstream类型

        b)       Ifstream类型与文件名挂钩

        c)        正式读取

        d)       关闭

           

     读法1:单个读取

     1 #include<iostream>
     2 #include<fstream>
     3 #include<string>
     4 using namespace std;
     5 int main(){
     6     
     7     string str;
     8     
     9     ifstream in;
    10     
    11     in.open("baby.txt"); 
    12     in>>str;
    13     cout<<str<<endl;
    14 
    15     in>>str;
    16     cout<<str<<endl;    
    17     
    18     return 0;
    19 }

    输出结果:

    显然这种读法只能单个读取(即:遇见空格 或 换行 结束读入)

    读法2:整行读取(使用getline函数)

     1 #include<iostream>
     2 #include<fstream>
     3 #include<string>
     4 using namespace std;
     5 int main(){
     6     
     7     string str;
     8     
     9     ifstream in;
    10     
    11     in.open("baby.txt"); 
    12     
    13     getline(in,str);
    14     cout<<str<<endl;
    15 
    16     getline(in,str);
    17     cout<<str<<endl;    
    18     
    19     return 0;
    20 }

    运行结果:

    如果遇见汉字乱码问题,则是文件编码与系统编码不同而导致的,详情看下链接。     

    https://blog.csdn.net/Jinxiaoyu886/article/details/101350354

  • 相关阅读:
    朴素贝叶斯分类模型
    进程同步机制
    Django知识点汇总
    Django框架_URLconf、Views、template、ORM
    WebSocket介绍
    Django小练习
    数据库(11)-- Hash索引和BTree索引 的区别
    MySQL数据库--练习
    Web 框架 Flask
    Django之Model操作
  • 原文地址:https://www.cnblogs.com/q1204675546/p/13620105.html
Copyright © 2011-2022 走看看