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


目录
打赏
0
1
1
0
48
分享
相关文章
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
120 0
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
61 34
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
174 1
Linux C/C++之IO多路复用(aio)
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
【JavaEE】——文件IO(万字长文)
文件路径,文本文件,二进制文件,File类,文件流,字节流(InputStream,OutputStream)字符流(Reader,Writer)
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
3月前
|
提高C/C++代码的可读性
提高C/C++代码的可读性
92 4
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
138 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
4月前
|
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
102 0
Linux C/C++之IO多路复用(poll,epoll)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等