C++文本文件读写操作详解

article/2024/12/22 2:28:24

C++文本文件读写操作详解

前面章节中,已经给大家介绍了文件流对象如何调用 open() 方法打开文件,并且在读写(又称 I/O )文件操作结束后,应调用 close() 方法关闭先前打开的文件。那么,如何实现对文件内容的读写呢?接下来就对此问题做详细的讲解。

在讲解具体读写文件的方法之前,读者首先要搞清楚的是,对文件的读/写操作又可以细分为 2 类,分别是以文本形式读写文件和以二进制形式读写文件。

  1. 我们知道,文件中存储的数据并没有类型上的分别,统统都是字符。所谓以文本形式读/写文件,就是直白地将文件中存储的字符(或字符串)读取出来,以及将目标字符(或字符串)存储在文件中。

  2. 而以二进制形式读/写文件,操作的对象不再是打开文件就能看到的字符,而是文件底层存储的二进制数据。更详细地讲,当以该形式读取文件时,读取的是该文件底层存储的二进制数据;同样,当将某数据以二进制形式写入到文件中时,写入的也是其对应的二进制数据。

举个例子,假设我们以文本形式将浮点数 19.625 写入文件,则该文件会直接将 “19.625” 这个字符串存储起来。当我们双击打开此文件,也可以看到 19.625。值得一提的是,由非字符串数据(比如这里的浮点数 19.625)转换为对应字符串(转化为 “19.625”)的过程,C++ 标准库已经实现好了,不需要我们操心。

但如果以二进制形式将浮点数 19.625 写入文件,则该文件存储的不再是 “19.625” 这个字符串,而是 19.625 浮点数对应的二进制数据。以 float 类型的 19.625 来说,文件最终存储的数据如下所示:
0100 0001 1001 1101 0000 0000 0000 0000

显然,如果直接将以上二进制数据转换为 float 类型,仍可以得到浮点数 19.625。但对于文件来说,它只会将存储的二进制数据根据既定的编码格式(如 utf-8、gbk 等)转换为一个个字符。这也就意味着,如果我们直接打开此文件,看到的并不会是 19.625,往往是一堆乱码。

C++ 标准库中,提供了 2 套读写文件的方法组合,分别是:
使用 >> 和 << 读写文件:适用于以文本形式读写文件;
使用 read() 和 write() 成员方法读写文件:适用于以二进制形式读写文件。

本节先讲解如何用 >> 和 << 实现以文本形式读写文件,至于如何实现以二进制形式读写文件,下一节会做详细介绍。

C++ >>和<<读写文本文件

通过前一节的学习我们知道,fstream 或者 ifstream 类负责实现对文件的读取,它们内部都对 >> 输出流运算符做了重载;同样,fstream 和 ofstream 类负责实现对文件的写入,它们的内部也都对 << 输出流运算符做了重载。

所以,当 fstream 或者 ifstream 类对象打开文件(通常以 ios::in 作为打开模式)之后,就可以直接借助 >> 输入流运算符,读取文件中存储的字符(或字符串);当 fstream 或者 ofstream 类对象打开文件(通常以 ios::out 作为打开模式)后,可以直接借助 << 输出流运算符向文件中写入字符(或字符串)。

举个例子:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{int x,sum=0;ifstream srcFile("in.txt", ios::in); //以文本模式打开in.txt备读if (!srcFile) { //打开失败cout << "error opening source file." << endl;return 0;}ofstream destFile("out.txt", ios::out); //以文本模式打开out.txt备写if (!destFile) {srcFile.close(); //程序结束前不能忘记关闭以前打开过的文件cout << "error opening destination file." << endl;return 0;}//可以像用cin那样用ifstream对象while (srcFile >> x) {sum += x;//可以像 cout 那样使用 ofstream 对象destFile << x << " ";}cout << "sum:" << sum << endl;destFile.close();srcFile.close();return 0;
}

注意,此程序中分别采用 ios::in 和 ios::out 打开文件,即以文本模式而非二进制模式打开文件。感兴趣的读者可在其基础上添加 ios::binary,即以二进制模式打开文件,程序依旧会正常执行。这是因为,以文本模式打开文件和以二进制模式打开文件,并没有很大的区别。

执行此程序之前,必须在和该程序源文件同目录中手动创建一个 in.txt 文件,假设其内部存储的字符串为:

10 20 30 40 50

建立之后,执行程序,其执行结果为:

sum:150

同时在 in.txt 文件同目录下,会生成一个 out.txt 文件,其内部存储的字符和 in.txt 文件完全一样,读者可自行打开文件查看。

通过分析程序的执行结果不难理解,对于 in.txt 文件中的 “10 20 30 40 50” 字符串,srcFile 对象会依次将 “10”、“20”、“30”、“40”、“50” 读取出来,将它们解析成 int 类型的整数 10、20、30、40、50 并赋值给 x,同时完成和 sum 的加和操作。

同样,对于每次从 in.txt 文件读取并解析出的整形 x,destFile 对象都会原封不动地将其再解析成对应的字符串(如整数 10 解析成字符串 “10”),然后和 " " 空格符一起写入 out.txt 文件。


http://chatgpt.dhexx.cn/article/WJmRHxot.shtml

相关文章

File文件读写操作

文章目录 一、文件中常用的函数fopen()fputs()fflush()fclose() 二、使用实例1.读取文件2.写入文件3.main() 总结 一、文件中常用的函数 fopen() 打开文件 fopen(const char* filename, const char* mode)filename&#xff1a;文件名 mode&#xff1a;打开方式&#xff0c;…

Android 文件读写

Android的App可以读写的位置为&#xff1a; 一、内置data目录下对应app名称的目录&#xff1b; 二、扩展SD卡&#xff08;包括虚拟的内置SD卡和外置SD卡&#xff09;&#xff1b; 一、先说说内置data目录下文件的读写。 内置data目录即内部存储&#xff0c;指的是应用内部独有…

c++文件读写

0. 参考 c文件读写&#xff08;很全&#xff09; 1. 简要 C 文件读写很重要&#xff0c;我们经常要面临数据的读写以及读写之后的类型转换&#xff0c;接下来我们就详细的讲解C中的文件读写。 2. 读写步骤 2.1 包含头文件 #include <fstream>2.2 创建流对象 ofstr…

文件的读写基本操作

一、文件是计算机中数据持久化存储的表现形式 读写文件标准操作格式1&#xff1a; 1、打开文件&#xff1a;file1 open(文件名,读写模式) 2、操作文件 3、关闭文件&#xff1a;file1.close()文件操作完毕后必须关闭&#xff0c;否则长期保持对文件的连接状态&#xff0c;造成…

最好懂的python文件读写(详解)

目录 1、文件读写的流程   2、文件读写的几种常见模式(你不清楚的知识点)   3、read、readline、readlines的区别   4、对于一个10G的大文件&#xff0c;怎么高效的查看文件中的内容呢&#xff1f; 1、文件读写的流程 1&#xff09;类比windows中手动操作txt文档&#…

C/C++文件读写(最全方法,多种实现)

文章目录 前言一、文件处理过程二、C处理文件1.打开文件2.读文件4.写文件5.关闭文件 三、C处理文件四、Windows API处理文件五、ATL处理文件总结 C/C实战入门到精通 https://blog.csdn.net/weixin_50964512/article/details/125710864 前言 本章主要详解C/C对文件的所有常…

FTP如何设置用户名密码

1、新建FTP站点&#xff0c;指定名称和物理路径 2、“身份验证”选择 基本&#xff0c;“允许访问”选择 指定用户&#xff0c;下面文本框中输入“本地用户和组”中现有的一个用户名即可。 注意&#xff1a;只能是“本地用户和组”中的用户&#xff0c;自己指定的其他用户名无…

win10系统连接服务器的用户名多少,win10 ftp服务器 用户名和密码

win10 ftp服务器 用户名和密码 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS&#xff0c;不需要写代码&#xff0c;也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份。这里以CDM周期性备份FTP的文件到OBS为例进行介绍。例如&#xff1a;FTP服务器的to…

Windows下如何搭建FTP服务并且设置其用户名和密码

1. 为了设置用户名和密码&#xff0c;要做一些准备工作&#xff1a; 打开 右键 计算机-》管理-》本地用户和组 右键之后点击新用户&#xff1a; 设置你自己的用户名和密码&#xff0c;这个就是之后给ftp服务用的。 2. 控制面板-》程序和功能-》打开或关闭Windows功能&am…

win10 FTP服务器设置用户名和密码

设置FTP用户及密码之前,请先给电脑添加新的本地账户以及搭建本地ftp服务器。FTP用户及密码就是win10的账户名和密码。 win10添加新的本地账户:https://jingyan.baidu.com/article/b0b63dbf3b38d54a49307046.html 搭建本地FTP服务器:https://blog.csdn.net/feifei_Tang/arti…

用Metasploit破解ftp用户名和密码

Metasploit是渗透测试人员在世界各地的资源和工具&#xff0c;比较常用的命令&#xff1a; msfconsole——直接进入 show options——查看 set RHOSTS ip地址/段 use 路径 需要在虚拟机的2003版本下创建FTP服务 将字典密码文件加入到虚拟机的系统里边 命令 ——rz 查看ftp是…

win7修改ftp服务器密码,win7ftp服务器设置用户名密码设置

win7ftp服务器设置用户名密码设置 内容精选 换一换 登录云服务器的用户名和密码&#xff1a;Windows操作系统用户名&#xff1a;AdministratorLinux操作系统用户名&#xff1a;root如忘记登录密码&#xff0c;可通过 “ 重置密码 ” 功能设置新密码。 代码迁移工具进行代码迁移…

linux下的ftp登陆用户名和密码,Linux下实现ftp普通账号和vip账号限速

ftp工作流程: ftp回话包含了两个通道,控制通道和数据通道,ftp的工作有两种模式,一种是主动模式,一种是被动模式,以ftpserver为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的连接 主动模式: ftp客户端连接到ftp服务器的21端口,发送用户名和密码,…

抓取FTP登录名和密码

R1配置IP地址 <H3C>system-view [H3C]sysname R1 [R1]int g0/0 [R1-GigabitEthernet0/0]ip address 1.1.1.1 24 R2配置IP地址 <H3C>system-view [H3C]sysname R2 [R1]int g0/1 [R2-GigabitEthernet0/0]ip address 1.1.1.2 24 R2开启FTP服务&#xff0c;创建用…

CentOS 7如何找回用户名和密码

当我们在使用CentOS 7系统时忘记了账号密码怎么办呢&#xff1f; 第一步 进入选择系统界面 选择你的操作系统 然后按e键进入 第二步 进入界面后添加代码并执行 如图所示 在UTF-8后面添加 init/bin/sh这段代码 之后按cltr x 执行进入命令行界面 第三步 如何查看你的用户名和…

用户名密码方式访问 FTP

前言 用户名密码方式访问 FTP。 简介 场景&#xff1a;ftp 和 www web 服务器相结合 公司内部现在有一台 FTP 和 WEB 服务器&#xff0c;FTP 的功能主要用于维护公司的网站内容&#xff0c;包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务&#xff0c…

Windows10系统怎么在电脑上搭建ftp服务器?ftp用户名密码忘了怎么查看?

1.从程序面板中选择:打开或关闭windows功能,勾选下面标红选框点击确定 2.我的电脑,鼠标右击选择【管理】,点击服务和应用程序,intent information services, 3.点击【网站】鼠标右击选择添加FTP站点管理,站点名称自己定义,物理路径自定义,点击下一步 4选择自己的IP

用户自己修改ftp服务器默认密码是什么,ftp服务器 改默认用户名和密码

ftp服务器 改默认用户名和密码 内容精选 换一换 支持2.2.T1、2.2.T2、2.2.T2.SPC100、2.2.T2.SPC200、2.2.T2.SPC300版本升级到2.2.T3版本。支持2.2.T3升级到2.2.1版本。支持2.2.T3、2.2.1升级到2.2.T4版本。支持2.2.T4、2.2.1升级到2.3.T10版本。联网状态下,系统会自动下载鲲…

实验二 简单网络命令和wireshark捕获FTP用户名密码

实验二 简单网络命令和wireshark捕获FTP用户名密码 预备知识 Wireshark&#xff08;前称Ethereal&#xff09;是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口&#xff0c;直接…

FTP-用户名密码明文传输

一、实验原理 FTP协议用于用户认证的过程中&#xff0c;客户端与服务器是通过明文进行交互信息的。 二、实验环境 目标主机&#xff1a;Win2K3 192.168.20.145 攻击主机&#xff1a;Kali2 192.168.20.133 三、实验过程 在Kali2上开启wireshark软件&#xff0c;抓取FTP数据…