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;
}
posted @ 2018-06-05 22:22  小石王  阅读(345)  评论(0编辑  收藏  举报