【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]

简介: 【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]

前言

大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁

主要内容含:


一.C++文件IO流基本知识

1)采用文件流对象操作文件的一般步骤:

  1. 定义一个文件流对象
  2. 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系
  3. 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写
  4. 关闭文件

2)定义一个文件流对象

C++中定义一个文件流对象有三种

  • ifstream ifile(只输入用)
  • ofstream ofile(只输出用)
  • fstream iofile(既输入又输出用)

3)文件内容的数据格式分类

  • C++根据文件内容的数据格式分为 二进制文件 和 文本文件


4)从“输入输出”角度理解——>文件IO和基础IO记忆(cout&cin)

  • 在基础IO中——cout是读操作,cin是写操作
  • 而在文件IO中——cout是写操作,cin是读操作
  • 我们可以这么理解:
  1. 基础IO中,我们操作的对象是键盘,输入对象是显示器,cout把程序的内容输出给显示器(读),cin把键盘的内容输出给显示器(写);
  2. 在文件IO中,我们操作的对象是文件,cout把程序的内容输出给文件(写),cin把文件输出给显示器(读);


二.C++文件IO流操作完整演示(代码)

struct ServerInfo
{
  char _address[32];
  // 二进制读写不能用string vector这样的对象存数据
  // 否则写出去就是一个指针,进程结束就是野指针,另一个进程再读进来进坑了
  //string _address;
  int _port;

  Date _date;
};

struct ConfigManager
{
public:
  ConfigManager(const char* filename = "file.txt")
    :_filename(filename)
  {}

  // 二进制读写 -- 简单高效,缺点:写到文件中的内容看不懂
  void WriteBin(const ServerInfo& info)
  {
    ofstream ofs(_filename, ios_base::out | ios_base::binary);//定义一个文件流对象
    ofs.write((const char*)&info, sizeof(info));
  }
  void ReadBin(ServerInfo& info)
  {
    ifstream ifs(_filename, ios_base::in | ios_base::binary);//定义一个文件流对象
    ifs.read((char*)&info, sizeof(info));
  }

    //文本读写
  void WriteText(const ServerInfo& info)
  {
    ofstream ofs(_filename);//定义一个文件流对象
    ofs << info._address << " " << info._port << " " << info._date;
  }
  void ReadText(ServerInfo& info)
  {
    ifstream ifs(_filename);//定义一个文件流对象
    ifs >> info._address >> info._port >> info._date;
  }
private:
  string _filename; // 配置文件
};

int main()
{
  ServerInfo winfo = { "192.0.0.1111111111111111111", 80, { 2022, 4, 10 } };
  ConfigManager cm("test.bin");
  cm.WriteBin(winfo);

  return 0;
}

int main()
{
  ConfigManager cf_bin("test.bin");
  ServerInfo rbinfo;
  cf_bin.ReadBin(rbinfo);
  cout << rbinfo._address << "  " << rbinfo._port << "  " << rbinfo._date << endl;

  return 0;
}

int main()
{
  ServerInfo winfo = { "192.0.0.1111111111111111111", 80, { 2022, 4, 10 } };
  ConfigManager cm("test.txt");
  cm.WriteText(winfo);

  return 0;
}

int main()
{
  ConfigManager cf_bin("test.txt");
  ServerInfo rbinfo;
  cf_bin.ReadText(rbinfo);
  cout << rbinfo._address << "  " << rbinfo._port << "  " << rbinfo._date << endl;

  return 0;
}

int main()
{
  ifstream ifs("Test.cpp");
  char ch;
  while (ifs.get(ch))
  {
    cout << ch;//全读
  }

  return 0;
}


相关文章
|
3天前
|
C++
C++的简单文本文件IO
C++的简单文本文件IO
|
9天前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
16 1
|
2天前
|
C++
Open3D File Io 文件IO
Open3D File Io 文件IO
|
3天前
|
C++ 编译器
【C++语言】Date类的代码实现(操作符重载运用)
【C++语言】Date类的代码实现(操作符重载运用)
|
3天前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
5天前
|
存储 API C语言
C/C++爱心代码
C/C++爱心代码
23 2
|
9天前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
13 1
|
9天前
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
10 1
|
10天前
|
Linux C++
Linux C/C++目录和文件的更多操作
Linux C/C++目录和文件的更多操作
|
10天前
|
NoSQL Linux C++
Linux C/C++ gdb调试core文件
Linux C/C++ gdb调试core文件