文件输入输出(文本文件、二进制文件)(ifstream、ofstream)

article/2025/9/25 23:16:36

在这里插入图片描述

一.写入文件流程

  1. 创建一个ofstream对象来管理输出流。
  2. 将该对象与特定文件关联起来。
  3. 以使用cout方式使用该对象,唯一区别是输出进文件,不是屏幕。
  4. 关闭文件流.
ofstream fout;
fout.open(filename);
//上面两步可以合并为:
ofstream fout(filename);//直接调用ofstream 类的构造函数
fout<<"data";//写入文件
fout.close();

二.读取文件流程

  1. 创建一个ifstream对象管理输入流。
  2. 将该对象与特定的文件关联起来。
  3. 以使用cin的方式使用该对象。
  4. 关闭文件流。
ifstream fin;
fin.open(filename);
//上面两步可以合并为:
ifstream fin(filename);//直接调用ifstream 类的构造函数
//以使用cin的方式使用该对象。
char ch;
fin>>ch;//从filename中读取一个字符
char buf[80];
fin>>buf;//从filename读取80个字符
fin.getline(buf,80);//从文件中读取一行
string line;
getline(fin,line);//从文件中读取一行fin.close();

三.检查文件流是否打开成功

fin.open(filename);//创建文件流
//方法一
if(fin.fail()){cout<<"文件打开失败!"<<endl;
}
//方法二
if(!fin){cout<<"文件打开失败!"<<endl;
}
//方法三
if(!fin.is_open()){cout<<"文件打开失败!"<<endl;
}

其中,方法三更好用,因为它能够检测出其他方式不能检测出的微妙问题。

四.文件写入、读取例子

#include <iostream>
#include <fstream>
using namespace std;int main() {string filename;cout << "input file name:" << endl;cin >> filename;//创建文件的输出流ofstream fout(filename.c_str());fout << "For your eyes only!\n";//写向文件cout << "Enter secret number:";//写向屏幕float secret;cin >> secret;fout << "Your secret number is " << secret << endl;fout.close();//创建文件的输入流ifstream fin(filename);if (!fin.is_open()) {cout << "文件打开失败!" << endl;}cout << "Here are the contents of " << filename << ":" << endl;char ch;while (fin.get(ch))cout << ch;cout << "Done\n";fin.close();
}

在这里插入图片描述

五.文件模式

文件模式是描述文件将被如何使用:读、写、追加等。
在这里插入图片描述
trunc:单词原型为:truncate,译为截断。
因此,ios_base::trunc:打开已有的文件,以接受成熟输出时将被截断;也就是删除以前的内容。
ios_base::out:本身也会导致文件被截断,相当于先删除以前文件内容,再写入文件。
app:单词原型为append,译为追加。
使用方法:

	ifstream fin(filename, C++mode);//调用构造函数,同时申明模式//或ofstream fout;fout.open(filename, C++mode);//在open函数中申明模式

在这里插入图片描述
ios_base::ate和ios_base::app都将文件指针指向打开的文件尾。二者的区别在于,前者将指针放在文件尾;后者只允许将数据添加到文件尾。

六.追加文件案例

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>//for exit()
using namespace std;const char* file = "guest.txt";
int main() {char ch;ifstream fin;fin.open(file);if (fin.is_open()) {cout << "Here are the current content of the " << file << " file:\n";while (fin.get(ch))cout << ch;fin.close();}ofstream fout(file, ios_base::out | ios_base::app);if (!fout.is_open()) {cerr << "Can't open " << file << " file for output.\n";exit(EXIT_FAILURE);}cout << "Enter guest names (enter a blank line to quit):\n";string name;cin >> name;fout << name << endl;//show revise filefin.clear();//not necessary for some compilerfin.open(file, ios_base::in);if (fin.is_open()) {cout << "Here are the new contents of the " << file << " file:\n";while (fin.get(ch))cout << ch;fin.close();}

在这里插入图片描述

七.二进制文件

将数据存储在文件中,可以将其存储为文本格式或二进制格式。
文本格式:指的是将所有内容(甚至是数组)都存储为文本。例如,以文本格式存储值**-2.324216e+07**,将存储该数字包含的13个字符。
二进制格式:指的是存储值的计算机内部表示。也就是说,计算机不是存储字符,而是存储这个值的64位double表示。
对于字符来说,二进制表示和文本表示都是一样的,即字符的ASCII码的二进制表示。但是对于数字来说,二进制表示与文本表示有很大的差别。
例如:
0.375的二进制表示
0(符号位)0111110(指数位)110000000000000000000000(二进制分数位)
0.375的文本表示
00110000(字符0编码)00101110(字符 . 编码)00110011(字符3编码)00110111(字符7编码)00110111(字符5编码)

优缺点:
文本格式:便于读取,可以使用编译器或字处理器来读取和编辑文本文件,可以很方便地将文本文件从一个计算机系统传输到另一个计算机系统。
二进制文件:对数字来说比较精确,因为他存储的是值的内部表示,不会出现转换误差和舍入误差。同时,保存数据更快,因为不需要转换,占用空间较小。然而,如果另一个系统使用另一种内部表示,则可能无法将数据传输给该系统。

使用:

const int LIM = 20;
struct planet
{char name[LIM];double population;double g;
};
planet p1;
ofstream fout("planet.dat", ios_base::out | ios_base::binary);//ios_base::binary二进制
fout.write((char*)&p1, sizeof p1);
//程序前往p1结构的地址,并将开始的36个字节(sizeof p1表达式的值)复制到与fout关联的文件中//信息恢复
ifstream fin("planet.dat", ios_base::out | ios_base::binary);//ios_base::binary二进制
fin.read((char*)&p1, sizeof p1);//read()将从文件中复制sizeof p1个字节到p1结构中。

write():这种方法将内存中指定数目的字节复制到文件中,必须将地址强制转换为char的指针。

使用案例:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>//for exit()
using namespace std;inline void eatline() { while (cin.get() != '\n') continue; }
const char* file = "planets.dat";
struct planet
{char name[20];double population;double g;
};
int main() {planet p1;cout << fixed << right;//show initial contentsifstream fin(file, ios_base::out | ios_base::binary);if (fin.is_open()) {cout << "Here are the current contents of the " << file << " file:\n";while (fin.read((char*)&p1, sizeof p1)) {//写入p1中cout << setw(20) << p1.name << ":" << setprecision(0) << setw(12) << p1.population << setprecision(2) << setw(6) << p1.g << endl;}fin.close();}//add dataofstream fout(file, ios_base::out | ios_base::binary|ios_base::app);if (!fout.is_open()) {cerr << "Can't open" << file << "file for output:\n";exit(EXIT_FAILURE);}cin.get(p1.name, 20);while (p1.name[0] != '\0') {eatline();cout << "Enter planetary population:";cin >> p1.population;cout << "Enter planet's acceleration of gravity:";cin >> p1.g;eatline();fout.write((char*)&p1, sizeof p1);cout << "输入回车结束,再次输入name:" << endl;cin.get(p1.name, 20);}fout.close();//show revised filefin.clear();//not required for some implementations,but won't hurtfin.open(file, ios_base::out | ios_base::binary);if (fin.is_open()) {cout << "Here are the current contents of the " << file << " file:\n";while (fin.read((char*)&p1, sizeof p1)) {//写入p1中cout << setw(20) << p1.name << ":" << setprecision(0) << setw(12) << p1.population << setprecision(2) << setw(6) << p1.g << endl;}fin.close();}cout << "Done" << endl;
}

在这里插入图片描述

八.EOF()函数

EOF:原型end of file,用于判断作为文件结束标志的文件,必须是文本文件。

while (!infile.eof())

九.以前笔记

功能:将source.txt文件中内容,写进target.txt文件中。
source.txt文件
在这里插入图片描述
target.txt文件
在这里插入图片描述

读文件
两种方法,如下:

#include <iostream>
#include <fstream>//引入文件读写的头文件
using namespace std;//文件路径
string source = "C:\\Users\\19a405\\Desktop\\source.txt";
string target = "C:\\Users\\19a405\\Desktop\\target.txt";
int main() {//方法一:调用ifstream类构造函数ifstream ism1(source,ios::in);//只读方式打开文件//方法二:调用ifstream类内部函数open()ifstream ism2;ism2.open(source, ios::in);//判断文件是否打开成功if (!ism1) {//这里在ifstream类中重载了!号cout << "文件打开失败!" << endl;}//读文件char ch;//get()每次读取一个字符,就是cin.get()作用while (ism1.get(ch)){cout << ch;}//关闭文件ism1.close();
}

结果:
在这里插入图片描述

写文件

#include <iostream>
#include <fstream>//引入文件读写的头文件
using namespace std;//文件路径
string source = "C:\\Users\\19a405\\Desktop\\source.txt";
string target = "C:\\Users\\19a405\\Desktop\\target.txt";
int main() {//读文件//方法一:调用ifstream类构造函数ifstream ism1(source,ios::in);//只读方式打开文件//方法二:调用ifstream类内部函数open()ifstream ism2;ism2.open(source, ios::in);//写文件//方法一ofstream osm1(target, ios::out);//方法二ofstream osm2;osm2.open(target, ios::out);//判断文件是否打开成功if (!ism1) {//这里在ifstream类中重载了!号cout << "文件打开失败!" << endl;}//读文件char ch;while (ism1.get(ch))//get()每次读取一个字符,就是cin.get()作用{cout << ch;//给target写内容osm2.put(ch);}//关闭文件ism1.close();osm2.close();
}

结果:
在这里插入图片描述

问题
我们再次运行上述写文件代码。
结果:依然没变。
在这里插入图片描述
但是,我们想在文件后面进行追加后续文字,出现两个“我怀念的 等”。

文件追加
修改:增加ios::app.

//写文件
//方法一
ofstream osm1(target, ios::out|ios::app);
//方法二
ofstream osm2;
osm2.open(target, ios::out|ios::app);

继续运行:
结果:
在这里插入图片描述


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

相关文章

【IC7】FPGA最高工作频率的计算方法;FPGA最大输出频率;查看handbook的PLL最高频率;Fout_ext;Fout两个参数;FPGA输出1ns脉冲

目录 1 时钟周期 T Tco Tlogic Troute Tsu 2&#xff0c; 故 Tlogic 4 * Tlut   3&#xff0c;  Tco Tsu 12 * Tlut 4&#xff0c;搜索handbook&#xff0c;不要搜索datasheet 4-1 时钟树的特性 4-2 PLL特性&#xff1b;Fout_ext;Fout两个参数 5&#xff0…

CNN与RNN的详细介绍

CNN与RNN的介绍 本文主要总结我对李宏毅老师讲的CNN和RNN的理解&#xff0c;通过对比总结各自的优势&#xff0c;同时加深自己对这方面知识的理解。 1、CNN介绍 CNN是一种利用卷积计算的神经网络。它可以通过卷积计算将原像素很大的图片保留主要特征变成很小的像素图片。本文介…

CNN简介

CNN 卷积神经网络是含有卷积层的神经网络&#xff0c;而卷积层则得名于卷积运算。 Filter 在卷积层中&#xff0c;我们会用一个叫做filter的东西扫过一张图片。这些 filter 啊 它们的大小是,3 3 Channel 的 Size。如果今天是彩色图片的话,那就是 RGB 三个 Channel,如果是…

深度学习(六):CNN介绍

深度学习&#xff08;六&#xff09;&#xff1a;CNN介绍 CNN架构 首先input一张image以后&#xff0c;这张image会通过convolution layer&#xff0c;接下里做max pooling这件事&#xff0c;然后在做convolution&#xff0c;再做max pooling这件事。这个process可以反复无数次…

cnn算法

机器学习算法完整版见fenghaootong-github 卷积神经网络原理(CNN) 卷积神经网络CNN的结构一般包含这几个层&#xff1a; 输入层&#xff1a;用于数据的输入卷积层&#xff1a;使用卷积核进行特征提取和特征映射激励层&#xff1a;由于卷积也是一种线性运算&#xff0c;因此需…

cnn-lstm介绍(2)

1. CNN-LSTM模型。CNN具有注意最明显的特征&#xff0c;因此在特征工程中得到了广泛的应用。LSTM有&#xff0c;按时间顺序扩张的特性&#xff0c;广泛应用于时间序列中。 根据CNN和LSTM股票预测模型的特点 建立了基于CNN的LSTM模型-e模型结构 示意图如图1所示&#xff0c;主…

实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

Mask R-CNN是ICCV 2017的best paper&#xff0c;彰显了机器学习计算机视觉领域在2017年的最新成果。在机器学习2017年的最新发展中&#xff0c;单任务的网络结构已经逐渐不再引人瞩目&#xff0c;取而代之的是集成&#xff0c;复杂&#xff0c;一石多鸟的多任务网络模型。Mask …

CNN与RNN的区别

从应用方面上来看&#xff0c;我了解到的CNN用到做图像识别比较多&#xff0c;而RNN在做到语言处理多一点&#xff0c;如果拿来比喻的话&#xff0c;CNN如同眼睛一样&#xff0c;正是目前机器用来识别对象的图像处理器。相应地&#xff0c;RNN则是用于解析语言模式的数学引擎&a…

卷积神经网络(CNN)结构详解

一、CNN的基本结构&#xff1a; 1.图像就是输入层 2.接着是CNN特有的卷积层&#xff08;convolution&#xff09;&#xff0c;卷积层的自带激活函数使用的是ReLU 3.接着是CNN特有的池化层&#xff08;pooling&#xff09;&#xff0c; 4.卷积层池化层的组合可以在隐藏层中出…

CNN的实现(附代码)

前言 前文已经单独实现了卷积层和池化层&#xff0c;现在来组合这些层&#xff0c;搭建进行手写数字识别的CNN。 这个简单的CNN网络构成如下。 网络的构成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”&#xff0c;我们将它实现为名为SimpleConvNet…

CNN卷积网络简介

CNN卷积网络 CNN卷积网络的结构 输入层&#xff1a; 输入层是3232 RGB图像。 注&#xff1a;有必要计算每一层输出的图片大小。 卷积层&#xff1a; 卷积层的核心在于卷积核与激活函数。   卷积层最主要的作用是寻找与卷积核匹配的特征,因为与卷积核符合&#xff08;卷积核…

CNN的通俗理解

Agenda 1 卷积神经网络Convolutional Neural Networks,CNN1.1 前言1.2 图像转化成矩阵1.3 卷积核1.4 特征图feature map1.5 激活函数1.6 池化1.7 训练 1 卷积神经网络Convolutional Neural Networks,CNN 1.1 前言 卷积神经网络是针对图像的深度学习框架。 1.2 图像转化成矩阵…

CNN网络详解

分割线----------------------------------   这里更新过一次&#xff0c;在朋友的提醒下&#xff0c;我发现这份代码不是很容易懂。我使用了Pytorch给的官方demo重新实现了LeNet&#xff0c;并做出了详细解释&#xff0c;如果理解下面代码有问题&#xff0c;可以先看我的这篇…

卷积神经网络(CNN)基本概念

一、卷积神经网络基本概念 卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中&#xff0c;一个神经元只与部分邻层神经元相连接。在CNN的一个卷积层中&#xff0c;通常包含若干个特征平面&#xff0c;每个特征平面都由一些矩形排列的神经元…

CNN简单介绍及基础知识

文章目录 一&#xff09;卷积神经网络历史沿革 二&#xff09;CNN简单介绍 三&#xff09;CNN相关基础知识 前言 在过去的几年里&#xff0c;卷积神经网络(CNN)引起了人们的广泛关注&#xff0c;尤其是因为它彻底改变了计算机视觉领域&#xff0c;它是近年来深度学习能在计算机…

一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

一文读懂目标检测&#xff1a;R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 前言 之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测&#xff0c;包括R-CNN、Fast R-CNN、Faster R-CNN&#xff0c;但一直没有比较好的机会深入&#xff08;但当你对目标检测…

理解 CNN

理解 CNN 注意&#xff1a;下面提到的图像指位图 目录 理解 CNNCNN人类的视觉原理几个关键层卷积层(fliter、kernel)池化层 (pooling) 激活层(activate)全连接层(Linear) pytorch实现TextCNN卷积传播图解不同视角看CNN 参考 CNN 卷积神经网络-CNN 最擅长的就是图片的处理。它…

【深度学习】CNN算法

一.定义&#xff1a; 卷积神经网络&#xff08;CNN&#xff09;&#xff0c;是一类包含卷积计算且具有深度结构前馈神经网络&#xff0c;是深度学习&#xff08;deep learning&#xff09;的代表算法之一。 卷积神经网络具有表征能力&#xff0c;能够按其阶层结构对输入信息进…

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

一、CNN简介 1. 神经网络基础 输入层&#xff08;Input layer&#xff09;&#xff0c;众多神经元&#xff08;Neuron&#xff09;接受大量非线形输入讯息。输入的讯息称为输入向量。 输出层&#xff08;Output layer&#xff09;&#xff0c;讯息在神经元链接中传输、分析、权…

CNN(卷积神经网络)详解

Why CNN 首先回答这样一个问题&#xff0c;为什么我们要学CNN&#xff0c;或者说CNN为什么在很多领域收获成功&#xff1f;还是先拿MNIST来当例子说。MNIST数据结构不清楚的话自行百度。。 我自己实验用两个hidden layer的DNN(全连接深度神经网络)在MNIST上也能取得不错的成绩…