您的位置:首页 > 娱乐 > 明星 > 「C++系列」文件和流

「C++系列」文件和流

2025/3/10 0:21:14 来源:https://blog.csdn.net/xuaner8786/article/details/142258370  浏览:    关键词:「C++系列」文件和流

【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。

点击跳转到网站:【人工智能教程】
在这里插入图片描述

文章目录

  • 一、文件和流
    • 1. 文件操作
      • ① 打开文件
      • ② 读写文件
    • 2. 流操作
  • 二、应用场景
    • 1. 日志记录
    • 2. 数据持久化
    • 3. 配置文件读写
  • 三、相关链接

一、文件和流

在C++中,文件和流是处理输入/输出(I/O)操作的两个核心概念。文件是存储在硬盘上的数据集合,而流则是一种抽象的数据源或数据目的地,用于数据的输入或输出。C++标准库提供了丰富的类和函数来支持文件和流的操作。

1. 文件操作

在C++中,文件操作通常通过<fstream>库中的类来实现,主要包括ifstream(用于从文件读取数据)、ofstream(用于向文件写入数据)和fstream(同时支持读写操作)。

数据类型描述
ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream该数据类型表示输入文件流,用于从文件读取信息。
fstream该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

① 打开文件

使用这些类之前,你需要使用它们的open成员函数来打开文件。如果文件成功打开,open函数会返回true

模式标志描述
ios::app追加模式。所有写入都追加到文件末尾。
ios::ate文件打开后定位到文件末尾。
ios::in打开文件用于读取。
ios::out打开文件用于写入。
ios::trunc如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。
#include <fstream>
#include <iostream>int main() {std::ifstream infile("example.txt");if (!infile.is_open()) {std::cerr << "Failed to open file" << std::endl;return 1;}// ... 读取文件内容infile.close();std::ofstream outfile("output.txt");if (!outfile.is_open()) {std::cerr << "Failed to open file" << std::endl;return 1;}// ... 写入文件内容outfile.close();return 0;
}

② 读写文件

对于ifstream,你可以使用>>运算符或getline()函数来读取数据。对于ofstream,你可以使用<<运算符来写入数据。

std::string line;
while (getline(infile, line)) {// 处理每一行
}outfile << "Hello, World!" << std::endl;

2. 流操作

在C++中,流不仅限于文件操作。标准库还提供了其他类型的流,如cin(标准输入流)、cout(标准输出流)和cerr(标准错误输出流),它们分别用于从标准输入读取数据、向标准输出写入数据和向标准错误输出写入数据。

流操作非常灵活,支持多种数据类型和格式化输出。例如,你可以使用std::setwstd::setprecision等I/O操纵符来控制输出格式。

#include <iostream>
#include <iomanip> // 用于格式化输出int main() {double pi = 3.141592653589793;std::cout << std::fixed << std::setprecision(2) << pi << std::endl; // 输出: 3.14return 0;
}

二、应用场景

C++中文件和流的应用场景非常广泛,包括但不限于日志记录、数据持久化、配置文件读写、用户输入/输出等。下面我将提供几个具体的应用场景及其案例代码。

1. 日志记录

日志记录是应用程序中非常重要的一部分,用于跟踪程序的运行情况、调试信息或用户行为等。

案例代码

#include <fstream>
#include <iostream>
#include <string>
#include <chrono>
#include <iomanip>void logMessage(const std::string& message) {std::ofstream logFile("app.log", std::ios::app); // 使用append模式if (logFile.is_open()) {auto now = std::chrono::system_clock::now();auto in_time_t = std::chrono::system_clock::to_time_t(now);std::stringstream ss;ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X") << ": " << message << std::endl;logFile << ss.str();logFile.close();}
}int main() {logMessage("Application started.");// 模拟一些操作...logMessage("An error occurred.");return 0;
}

2. 数据持久化

数据持久化是指将程序中的数据保存到存储设备上,以便在程序终止后数据仍然可以恢复和使用。

案例代码

#include <fstream>
#include <iostream>
#include <vector>void saveData(const std::string& filename, const std::vector<int>& data) {std::ofstream outfile(filename, std::ios::binary);if (outfile.is_open()) {for (int num : data) {outfile.write(reinterpret_cast<const char*>(&num), sizeof(num));}outfile.close();}
}void loadData(const std::string& filename, std::vector<int>& data) {std::ifstream infile(filename, std::ios::binary);if (infile.is_open()) {int num;while (infile.read(reinterpret_cast<char*>(&num), sizeof(num))) {data.push_back(num);}infile.close();}
}int main() {std::vector<int> data = {1, 2, 3, 4, 5};saveData("data.bin", data);std::vector<int> loadedData;loadData("data.bin", loadedData);for (int num : loadedData) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

3. 配置文件读写

配置文件是应用程序中用于存储配置信息的文件,如数据库连接信息、程序设置等。

案例代码(使用简单的文本格式):

#include <fstream>
#include <iostream>
#include <sstream>
#include <map>std::map<std::string, std::string> readConfig(const std::string& filename) {std::map<std::string, std::string> config;std::ifstream infile(filename);std::string line;if (infile.is_open()) {while (getline(infile, line)) {size_t pos = line.find('=');if (pos != std::string::npos) {std::string key = line.substr(0, pos);std::string value = line.substr(pos + 1);config[key] = value;}}infile.close();}return config;
}int main() {auto config = readConfig("config.txt");for (const auto& pair : config) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}

在这里插入图片描述

三、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域
  4. 「C++系列」C++ 基本语法
  5. 「C++系列」C++ 数据类型
  6. 「C++系列」C++ 变量类型
  7. 「C++系列」C++ 变量作用域
  8. 「C++系列」C++ 常量知识点-细致讲解
  9. 「C++系列」C++ 修饰符类型
  10. 「C++系列」一篇文章说透【存储类】
  11. 「C++系列」一篇文章讲透【运算符】
  12. 「C++系列」循环
  13. 「C++系列」判断
  14. 「C++系列」函数/内置函数
  15. 「C++系列」数字/随机数
  16. 「C++系列」数组
  17. 「C++系列」字符串
  18. 「C++系列」指针
  19. 「C++系列」引用
  20. 「C++系列」日期/时间
  21. 「C++系列」输入/输出
  22. 「C++系列」数据结构
  23. 「C++系列」vector 容器
  24. 「C++系列」类/对象
  25. 「C++系列」继承
  26. 「C++系列」重载运算符/重载函数
  27. 「C++系列」多态
  28. 「C++系列」数据抽象
  29. 「C++系列」数据封装
  30. 「C++系列」 接口(抽象类)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com