Skip to content

Latest commit

 

History

History
184 lines (157 loc) · 3.13 KB

l_20.md

File metadata and controls

184 lines (157 loc) · 3.13 KB

Lesson20 C++文件操作



包含头文件 <fstream>

  1. ofstream:写操作
  2. ifstream:读操作
  3. fstream:读写操作

1. 文本文件

写入

步骤如下:

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ofstream ofs;
  3. 打开文件
    ofs.open("path", way);
  4. 写数据
    ofs << "data";
  5. 关闭文件
    ofs.close()

文件打开方式

打开方式 解释
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式

注意:文件打开方式可以配合使用,利用 | 操作符

example

ofs.open("path", ios::binary | ios::out);   // 用二进制方式写文件

读取

步骤如下:

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ifstream ifs;
  3. 打开文件
    ifs.open("path", way);
  4. 读数据 四种方式读入
  5. 关闭文件
    ofs.close()
#include <fstream>

void test() {
  // 创建流对象
  ifstream ifs;

  // 打开文件,并且判断是否打开成功
  ifs.open("test.txt", ios::in);

  if(!ifs.is_open()) {
    return;
  }

  // 读数据
  ...

  //关闭文件
  ifs.close();
}

读数据的4中方法

char buf[1024];
while(ifs >> buf) {
  std::cout << buf << std::endl;
}
char buf[1024] = {0};
while(ifs.getline(buf, sizeof(buf))) {
  std::cout << buf << std::endl;
}
std::string buf;
while(getline(ifs), buf) {
  std::cout << buf << std::endl;
}
char c;
while((c = ifs.get()) != EOF) {
  std::cout << c;
}

2. 二进制文件

写入

二进制方式写文件主要利用流对象调用成员函数 write()

ostream& write(const char* buffer, int len);

二进制写文件可以写入自定义数据类型

struct Person {
  char m_Name[64];
  int m_Age;
};

void test() {
  ofstream ofs("person.txt", ios::out | ios::binary);

  Person p{"abc", 18};
  ofs.write((const char*)&p, sizeof(Person));

  ofs.close();
}

读取

二进制方式读文件主要利用流对象调用成员函数 read()

ostream& read(char* buffer, int len);

二进制写文件可以写入自定义数据类型

struct Person {
  char m_Name[64];
  int m_Age;
};

void test() {
  ifstream ifs("person.txt", ios::in | ios::binary);
  if(ifs.is_open()) {
    return;
  }

  Person p;
  ifs.read((char*)&p, sizeof(Person));

  std::cout << "name:" << p.m_Name 
            << " age:" << p.m_Age << std::endl;

  ifs.close();
}

edit Serien