• c++文件的读写


    c++文件的读写

    1.文本方式的写文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){
      int ar[] = {1123,123,43,45,63,43,2,3};
      //方法1,ios::out含义是也写的方式打开流
      ofstream ofile1("./test.txt", ios::out);
      //方法2
      ofstream ofile2;
      ofile2.open("./test.txt");                                                           
      if(!ofile1){//文件打开失败
        cerr << "open err" << endl;
        exit(1);
      }
      for(int i = 0; i < sizeof(ar) / sizeof(int); ++i){
        ofile1 << ar[i] << " ";
      }
      ofile1.close();
    }
    
    

    2.文本方式的读文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){
      int ar[10];
      ifstream ifile("./test.txt",ios::in);
      if(!ifile){
        cerr << "open err" << endl;
        exit(1);
      }
      for(int i = 0; i < 10; ++i){
        //用空格分割读进数组                                                          
        ifile >> ar[i];
      }
    }
    

    3.二进制方式的写文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){
      int ar[] = {11,232,123123,1223,455,4,4,5,56,4,33};
      ofstream ofile("./text2.txt", ios::out | ios::binary);
      if(!ofile){
        cerr << "open err" << endl;
      }
      ofile.write((char*)ar, sizeof(ar));
      ofile.close();
    }
    

    4.二进制方式的读文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){
      int ar[10];
      ifstream ifile("./text2.txt",ios::in | ios::binary);
      if(!ifile){
        cerr << "open err" << endl;
      }
      ifile.read((char*)ar, sizeof(ar));
      ifile.close();
    }
    
    

    5.按位置读写文件

    • 文本方式的按位置读

      假设文件的内容:【1 12 222 3232 2232323】,每个数字节数都不一样,不能正确读出想要的。

      解决办法,使用二进制方式的按位置读。

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){                                                                              
      ifstream ifile("./test.txt", ios::in);                                                 
      if(!ifile){                                                                            
        cerr << "open err" << endl;                                                          
      }                                                                                      
      int index;                                                                             
      int value;                                                                             
      while(1){                                                                              
        cin >> index;                                                                        
        ifile.seekg(index, ios::beg); //移动指针                                                      
        ifile >> value;                                                                      
        cout << value << endl;                                                               
      }                                                                                      
    }  
    
    • 进制方式的按位置读
    #include <iostream>
    #include <fstream>
    using namespace std;
      
    int main(){
      ifstream ifile("./test.txt", ios::in | ios::binary);
      if(!ifile){
        cerr << "open err" << endl;
      }
      int index;
      int value;
      while(1){
        cin >> index;
        ifile >> value;
        cout << value << endl;
      }
    }
    

    6.文件与对象的例子

    在构造函数里读取文件A,用文件A里的数据初始化对象;在析构函数里把对象的数据写入文件A。

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    class C{
      friend ostream& operator<<(ostream&, const C&);
    public:
      C() : shi(0), xu(0){
        ifstream ifile("./data.dat", ios::in);
        if(!ifile){
          cerr << "open err" << endl;
          exit(1);
        }
        ifile >> shi >> xu;
        ifile.close();
      }
      C(int i, int j) : shi(i), xu(j){}
      ~C(){
        ofstream ofile("./data.dat", ios::out);
        if(!ofile){
          cerr << "open err" << endl;
          exit(1);
        }
        ofile << shi << " " << xu;
        ofile.close();
      }
      C(int i, int j) : shi(i), xu(j){}
      ~C(){
        ofstream ofile("./data.dat", ios::out);
        if(!ofile){
          cerr << "open err" << endl;
          exit(1);
        }
        ofile << shi << " " << xu;
        ofile.close();
      }
      void setC(int i, int j){
        shi = i;
        xu = j;
      }
    private:
      int shi;
      int xu;
    };
    
    ostream& operator<<(ostream& out, const C& c){
      out << "(" << c.shi << "," << c.xu << ")";
      return out;
    }
    int main(){
      C c;
      cout << c << endl;
      c.setC(10,22);
      cout << c << endl;
    }
    
  • 相关阅读:
    作业三:代码规范、代码复审、PSP
    第二周学习进度表
    作业二:Github注册过程
    作业二:源程序版本管理软件和项目管理软件的优缺点
    作业二:四则运算
    408笔记--操作系统
    408笔记--计算机网络
    408笔记--计算机组成原理
    408笔记--数据结构
    2020 PAT秋季甲级考试(91分)-记
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9142301.html
Copyright © 2020-2023  润新知