c++ 文件及基本读写总结

devtools/2025/3/3 17:57:52/

在 C++ 中,文件操作是非常重要的一部分,主要用于将数据存储到文件中,或者从文件中读取数据。C++ 标准库提供了fstream头文件,其中包含了用于文件操作的类,主要有ifstream(用于输入文件流,即从文件读取数据)、ofstream(用于输出文件流,即向文件写入数据)和fstream(既可以用于读取也可以用于写入)。以下是关于 C++ 文件基本读写的详细总结:
1. 包含头文件
在使用文件操作之前,需要包含fstream头文件。

#include <fstream>

2. 打开文件
在进行文件读写操作之前,需要先打开文件。可以使用open函数或者在构造函数中指定文件名来打开文件。
示例代码

#include <iostream>
#include <fstream>int main() {// 使用构造函数打开文件std::ofstream outFile("example.txt");if (!outFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}// 使用open函数打开文件std::ifstream inFile;inFile.open("example.txt");if (!inFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}// 关闭文件outFile.close();inFile.close();return 0;
}

3. 文件打开模式
在打开文件时,可以指定文件的打开模式,常见的打开模式如下:

  • ios::in:以输入模式打开文件,用于读取数据。
  • ios::out:以输出模式打开文件,用于写入数据。如果文件不存在,则创建文件;如果文件已存在,则清空文件内容。
  • ios::app:以追加模式打开文件,用于在文件末尾追加数据。
  • ios::binary:以二进制模式打开文件。
  • ios::trunc:如果文件已存在,则清空文件内容。
  • ios::ate:打开文件后将文件指针定位到文件末尾。
    示例代码
#include <iostream>
#include <fstream>int main() {// 以追加模式打开文件std::ofstream outFile("example.txt", std::ios::app);if (!outFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}outFile.close();return 0;
}

4. 写入文件
使用ofstream类可以将数据写入文件,与使用cout输出到控制台类似,使用<<运算符。
示例代码

#include <iostream>
#include <fstream>int main() {std::ofstream outFile("example.txt");if (!outFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}// 写入数据outFile << "Hello, World!" << std::endl;outFile << 123 << std::endl;outFile.close();return 0;
}

5. 读取文件
使用ifstream类可以从文件中读取数据,与使用cin从控制台读取数据类似,使用>>运算符。
示例代码

#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream inFile("example.txt");if (!inFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}std::string line;int num;// 读取数据std::getline(inFile, line);inFile >> num;std::cout << "读取的字符串: " << line << std::endl;std::cout << "读取的整数: " << num << std::endl;inFile.close();return 0;
}

6. 二进制文件读写
除了文本文件读写,C++ 还支持二进制文件读写。使用ios::binary模式打开文件,使用read和write函数进行读写操作。
示例代码

#include <iostream>
#include <fstream>struct Person {char name[50];int age;
};int main() {// 写入二进制文件Person p = {"John", 25};std::ofstream outFile("person.bin", std::ios::binary);if (!outFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}outFile.write(reinterpret_cast<const char*>(&p), sizeof(Person));outFile.close();// 读取二进制文件Person readPerson;std::ifstream inFile("person.bin", std::ios::binary);if (!inFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}inFile.read(reinterpret_cast<char*>(&readPerson), sizeof(Person));std::cout << "姓名: " << readPerson.name << std::endl;std::cout << "年龄: " << readPerson.age << std::endl;inFile.close();return 0;
}

outFile.close();
inFile.close();

8. 检查文件状态
在进行文件操作时,可以使用一些函数来检查文件的状态,例如:

  • is_open():检查文件是否成功打开。
  • eof():检查是否到达文件末尾。
  • fail():检查文件操作是否失败。
  • bad():检查文件是否发生严重错误。
    示例代码
#include <iostream>
#include <fstream>int main() {std::ifstream inFile("example.txt");if (!inFile.is_open()) {std::cerr << "无法打开文件!" << std::endl;return 1;}int num;while (inFile >> num) {std::cout << num << std::endl;}if (inFile.eof()) {std::cout << "到达文件末尾!" << std::endl;}if (inFile.fail()) {std::cerr << "文件操作失败!" << std::endl;}inFile.close();return 0;
}

http://www.ppmy.cn/devtools/164241.html

相关文章

校园的网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、什么是端口安全 端口安全&#xff08;Port Security&#xff09;&#xff0c;从基本原理上讲&#xff0c;Port Security特性会通过MAC地址表记录连接到交换机…

使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码

以下是使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码&#xff0c;以实现对两个样品的单线态氧自由基&#xff08; 1 O 2 ^1O_2 1O2​&#xff09;和超氧自由基&#xff08; O 2 − O_2^- O2−​&#xff09;的模拟&#xff0c;并将模拟结果导出为Excel文件。 步骤概…

计算机毕业设计SpringBoot+Vue.js常规应急物资管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

uniapp中页面跳转及encodeURIComponent转码的使用详解

文章目录 一、uniapp页面跳转方法汇总1. uni.navigateTo2. uni.redirectTo3. uni.reLaunch4. uni.switchTab5. uni.navigateBack 二、encodeURIComponent转码的使用场景1. 参数中有特殊字符时2. 参数值可能变化时 一、uniapp页面跳转方法汇总 1. uni.navigateTo 保留当前页面…

【数据结构】堆与二叉树

一、树的概念 1.1 什么是树&#xff1f; 树是一种非线性的数据结构&#xff0c;其由 n 个 ( n > 0 ) 有限节点所组成的一个有层次关系的集合。之所以称其为树&#xff0c;是因为其逻辑结构看起来像是一颗倒挂的树。 在树中&#xff0c;有一个特殊的节点称为根节点&#xf…

一个滑块可变色的Seekbar

因项目需要&#xff0c;做一个如下图的滑动条&#xff0c;要求如下&#xff1a; 1、滑块跟着进度条改变颜色 2、滑块有白色边和内部颜色组成 大体思路&#xff0c;就是背景需要UI按照需求提供&#xff0c;然后变色时&#xff0c;根据滑动回调动态设置对应的颜色。 直接上代码…

Oracle 数据库基础入门(二):深入理解表的约束

在 Oracle 数据库的学习进程中&#xff0c;表的约束是构建健壮、准确且高效数据库的关键要素。约束如同数据库的 “规则守护者”&#xff0c;它通过对数据的限制&#xff0c;确保了数据的完整性和一致性&#xff0c;就如同交通规则保障道路上车辆行驶的有序性一样。对于 Java 全…

【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题

最近&#xff0c;linux服务器遇到一个奇怪的问题&#xff0c;能ping通github&#xff0c;但是无法clone git项目&#xff0c;尝试了各种大模型&#xff0c;都提到代理啥的问题&#xff0c;发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false&#xff0c;才解决问题…