大话C++:第24篇 文件

news/2024/10/31 6:43:46/

1 文件概述

文件是指一组相关数据的有序集合,这个数据集的名称叫做文件名。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来,这就是为什么对文件操作时需要打开和关闭的原因。

根据数据的存储方式,文件可以分为二进制文件和文本文件。二进制文件直接存储二进制数据,可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。文本文件是以二进制字符编码形式存储信息的文件,常用的字符编码如ASCII码、Unicode码等。文本文件便于对字符进行逐个处理,也便于输出字符。

在C++中,对文件的操作通常需要使用文件流,包括输入文件流(ifstream)和输出文件流(ofstream)。通过这些文件流,可以打开、关闭文件,读取、写入文件内容,以及进行文件指针定位等操作。

此外,C++还提供了一些文件操作相关的类和函数,如文件流类(fstream)、文件操作函数(如fopen、fclose、fread、fwrite等),以及文件状态检查函数(如feof、ferror等),方便进行文件操作和管理。

2 文件输入操作

文件输入操作涉及到从外部文件中读取数据,并将其用于程序中的进一步处理。整个过程通常包括打开文件、读取文件内容、处理读取的数据,并在完成后关闭文件

文件输入操作主要步骤包括:

  • 创建输入文件流对象: 使用 std::ifstream 类创建一个输入文件流对象。

  • 打开文件: 使用 open() 成员函数打开文件

  • 检查文件是否成功打开: 在读取文件之前,最好检查文件是否成功打开。使用 is_open() 成员函数来检查。

  • 读取文件内容: 有多种方法可以从文件中读取数据,读取方式包括以下几种:

    • 逐行读取:使用 std::getline() 函数从文件中逐行读取文本。

    • 读取格式化数据:使用 >> 运算符读取格式化数据,如整数、浮点数或字符串。

  • 处理读取的数据: 在读取数据后,可以根据需要对数据进行处理。这可能包括解析数据、执行计算、更新程序状态等。

  • 关闭文件: 完成文件读取后,使用 close() 成员函数关闭文件。关闭文件是一个好习惯,它可以释放系统资源,并确保所有待处理的输入/输出操作都已完成。

  • 错误处理: 在读取文件时,可能会遇到各种错误,如文件不存在、读取权限不足、文件格式错误等。你应该准备好处理这些错误,以确保程序的健壮性。

#include <iostream>
#include <fstream>
#include <string>int main() 
{// 创建并尝试打开文件std::ifstream inputFile("example.txt"); // 检查文件是否打开if (!inputFile.is_open()) {std::cerr << "文件打开失败!" << std::endl;return 1;}std::string line;while (std::getline(inputFile, line)) { // 逐行读取文件// 输出到控制台std::cout << line << std::endl;     }// 文件关闭inputFile.close();return 0;
}

3 文件输出操作

文件输出操作在C++中通常涉及到使用<fstream>库中的ofstream类。ofstream代表输出文件流,用于将数据写入到文件中。

文件输入操作主要步骤包括:

  • 创建输出文件流对象: 使用 std::ofstream 类创建一个输出文件流对象。

  • 打开文件: 使用 open() 成员函数打开文件,准备写入数据。需要提供文件的路径作为参数。如果文件不存在,它将被创建;如果文件已存在,其内容将被覆盖,除非以追加模式打开文件

  • 写入数据到文件: 有多种方法可以将数据写入文件,具体取决于需求和要写入的数据类型。一些常见的方法包括:

    • 使用 << 运算符:就像使用 std::cout 一样,可以使用 << 运算符将数据写入文件

    • 写入格式化数据:可以使用流格式化功能来控制写入文件的数据的格式。

    • 写入二进制数据:如果你想写入二进制数据到文件,需要以二进制模式打开文件,并使用 write() 函数。

  • 关闭文件: 完成文件写入后,使用 close() 成员函数关闭文件。关闭文件是一个好习惯,它可以释放系统资源,并确保所有待处理的输入/输出操作都已完成。

  • 错误处理: 在写入文件时,可能会遇到各种错误,如磁盘空间不足、文件权限不足等。

#include <iostream>
#include <fstream>
#include <string>int main() 
{// 定义输出文件流对象std::ofstream outputFile;// 打开文件,准备写入。如果文件不存在,则创建它。outputFile.open("example.txt");// 检查文件是否成功打开if (!outputFile.is_open()) {std::cerr << "文件打开失败." << std::endl;// 返回错误代码return 1; }// 写入数据到文件outputFile << "This is a test file." << std::endl;outputFile << "Here is some more text." << std::endl;// 也可以写入变量int number = 123;outputFile << "变量number: " << number << std::endl;// 关闭文件outputFile.close();// 可以在关闭文件后检查是否成功关闭if (outputFile.fail()) {std::cerr << "文件关闭异常,请检查!" << std::endl;return 1;}std::cout << "文件写入成功!" << std::endl;return 0;
}

其中,文件打开模式包括:

打开模式描述
std::ios::in打开文件进行读取操作。这是std::ifstream的默认模式。
std::ios::out打开文件进行写入操作。如果文件已存在,内容可能会被清空(除非同时指定了std::ios::app)。这是std::ofstream的默认模式。
std::ios::app所有写入操作在文件末尾执行,保留文件中已存在的数据。
std::ios::ate打开文件后立即将读写位置定位到文件末尾。常与std::ios::in结合使用以访问已存在文件的数据。
std::ios::trunc如果文件已存在,并且是以输出模式(std::ios::out)打开,则删除文件内容。通常不需要显式指定,因为std::ios::out模式默认会清空文件。但如果同时指定了std::ios::app,则不会清空文件内容。
std::ios::binary以二进制模式打开文件,不进行文本转换。适用于非文本文件(如图像、音频等)。

注意,如果未明确指定模式,则std::ifstream将默认使用std::ios::in,而std::ofstream将默认使用std::ios::out。如果需要对文件进行读取和写入操作,则应该使用std::fstream,并明确指定所需的模式。


http://www.ppmy.cn/news/1543287.html

相关文章

【数据仓库】

数据仓库&#xff1a;概念、架构与应用 目录 什么是数据仓库数据仓库的特点数据仓库的架构 3.1 数据源层3.2 数据集成层&#xff08;ETL&#xff09;3.3 数据存储层3.4 数据展示与应用层 数据仓库的建模方法 4.1 星型模型4.2 雪花模型4.3 星座模型 数据仓库与数据库的区别数据…

java模拟进程调度

先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…

银河麒麟v10 xrdp安装

为了解决科技被卡脖子的问题&#xff0c;国家正在大力推进软硬件系统的信创替代&#xff0c;对于一些平时对Linux操作系统不太熟练的用户来讲提出了更高的挑战和要求。本文以银河麒麟v10 24.03为例带领大家配置kylin v10的远程桌面。 最近公司为了配置信创开发新购了几台银河麒…

啤酒游戏—企业经营决策沙盘

感谢黄浦区文华学院的邀请&#xff0c;今年是为南房集团开展系统思考培训的第二年。我们现在为客户设计的一整年系统思考训练中&#xff0c;会将系统环路结构图与真实议题研讨作为前置内容&#xff0c;让大家在理解整体框架后&#xff0c;再体验麻省理工学院系统动力学著名的“…

PDF无法转换成其他格式的常见原因与解决方法解析

在处理PDF文件转换时&#xff0c;用户常常会遇到一些问题&#xff0c;导致无法将PDF转换为其他格式&#xff08;如Word、Excel、或图片等&#xff09;。以下是一些常见原因以及解决方法的解析。 ## 一、常见原因 ### 1. **PDF文件的安全性设置** 许多PDF文件在创建时可能设置…

Android:ViewPaper动态添加移除第一页

问题&#xff1a; 动态改变itemList之后&#xff0c;调用notifyDataSetChanged();没有作用。 原因&#xff1a; 原因是PagerAdapter内部的getItemPosition方法获取的值是固定POSITION_UNCHANGED&#xff0c;表示未改变&#xff0c;所以不更新。 解决&#xff1a; 要更新则…

AUTOSAR 规范中的设计模式:传感器执行器模式

在 AUTOSAR Adaptive Platform (AP) 规范中&#xff0c;传感器执行器模式是一种典型的设计模式&#xff0c;主要用于实时控制系统中&#xff0c;用来实现传感器数据的获取和执行器指令的发送。该模式通过分离传感器和执行器的实现&#xff0c;使其独立运行并且能够通过某种通信…

显卡服务器的作用都有哪些?

显卡服务器就是人们日常生活中的GPU服务器&#xff0c;显卡服务器相比较普通的服务器来说&#xff0c;其最突出的特点是带有显卡功能&#xff0c;是对于企业中需要处理大数据的应用场景中可以添加独立显卡的服务器&#xff0c;那么显卡服务器的作用都有哪些呢&#xff1f; 显卡…