欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++文件的读写

程序员文章站 2022-03-21 15:37:43
c++文件的读写 1.文本方式的写文件 3.二进制方式的写文件 c++ include include using namespace std; int main(){ int ar[] = {11,232,123123,1223,455,4,4,5,56,4,33}; ofstream ofile ......

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;
}