文件的读写(cpp)
文件的读写(cpp)
c++中要进行文件的读入,首先要包含一个头文件 fstream 。
输出到文件
为打开一个可供输出的文件需要定义一个ofstream 对象并将文件名传入:
std::ofstream out("out.txt");
在不做任何其他操作的情况下,如果该文件不存在就会创建一个相应文件,如果存在就会打开并将原来文件中的信息全部覆盖。如果想要不覆盖原文件而仅仅是在文件的末尾加上要输出的信息,只需要在定义ofstream对象的时候传入第二个参数std::ios_base::app以打开追加模式(append_mode):
std::ofstream out_with_append("out.txt", std::ios_base::app);
此外由于文件可能会打开失败,所以需要用if判断文件是否打开成功。
#include <fstream>
#include <iostream>
int main () {
//输入到文件
std::ofstream out("out.txt");
if (!out) {
std::cerr << "error in out" << std::endl;
} else {
std::cerr << "successfully open out file" << std::endl;
out << "Hello world!" << std::endl;
}
std::ofstream out_with_append("out.txt", std::ios_base::app);
if (!out_with_append) {
std::cerr << "error in out_with_append" << std::endl;
} else {
std::cerr << "successfully open out_with_append file" << std::endl;
out_with_append << "Hello world again!" << std::endl;
}
return 0;
}
这其中std::endl是事先定义好的操作符,由iostream library 提供,他的作用是插入一个换行符并清除输出缓冲区(output buffer)的内容。
从文件中读入
要打开一个可供读入的文件,需要先定义一个ifstream对象并将供于读入的文件传入:
std::ifstream in("out.txt");
同样的文件依然可能会无法正常打开,所以也需要用if判断一下文件是否打开成功。
下面在上面代码的基础上增添ifstream的功能
#include <fstream>
#include <iostream>
#include <string>
int main () {
//输出到文件
std::ofstream out("out.txt");
if (!out) {
std::cerr << "error in out" << std::endl;
} else {
std::cerr << "successfully open out file" << std::endl;
out << "Hello world!" << std::endl;
}
std::ofstream out_with_append("out.txt", std::ios_base::app);
if (!out_with_append) {
std::cerr << "error in out_with_append" << std::endl;
} else {
std::cerr << "successfully open out_with_append file" << std::endl;
out_with_append << "Hello world again!" << std::endl;
}
//从文件中读入
std::ifstream in("out.txt");
if (!in) {
std::cerr << "error in in" << std::endl;
} else {
std::cerr << "successfully open in file" << std::endl;
std::string s;
while (in >> s) {
std::cout << s;
}
}
return 0;
}
这里控制台的全部输出内容为
successfully open out file
successfully open out_with_append file
successfully open in file
Helloworld!Helloworldagain!
Process finished with exit code 0
首先注意到这里在in >> s外面套了一层while,原因是每次读入在没有读到文件末尾的时候 in >> s会返回一个 in,而当读到文件末尾的时候会返回false,因此可以在while的循环表达式中作为结束的标志。
其次会发现输出的内容和输入的内容不一样,原因我引用了下面一段解释
因为istream_iterator的自增的副作用等价于相应流通过>>操作符读一个T类型的数据,而istream通过>>操作符读一个字符类型(这里就是char)的数据会跳过前面的空白字符
这里的空白字符不仅包括了空格,还包括换行符。
与ofstream一样,ifstream同样也有追加模式。为了以追加模式打开文件需要传入第二个参数std::ios::bash::in|std::ios::bash::app :
std::ifstream in("out.txt", std::ios_base::in|std::ios_base::app);
这里需要注意的是以追加模式打开文件会默认在文件的末尾,如果没有重新先定位就读取文件内容,那么就会立即遇到文件结束(EOF)的情况。seekg()可以将in重新定位到文件的起始处。
追加模式作用?
#include <fstream>
#include <iostream>
#include <string>
int main () {
//输出到文件
std::ofstream out("out.txt");
if (!out) {
std::cerr << "error in out" << std::endl;
} else {
std::cerr << "successfully open out file" << std::endl;
out << "Hello world!" << std::endl;
}
std::ofstream out_with_append("out.txt", std::ios_base::app);
if (!out_with_append) {
std::cerr << "error in out_with_append" << std::endl;
} else {
std::cerr << "successfully open out_with_append file" << std::endl;
out_with_append << "Hello world again!" << std::endl;
}
//从文件中读入
std::ifstream in("out.txt", std::ios_base::in|std::ios_base::app);
in.seekg(0);
if (!in) {
std::cerr << "error in in" << std::endl;
} else {
std::cerr << "successfully open in file" << std::endl;
std::string s;
while (in >> s) {
std::cout << s;
}
std::cout << std::endl;
out_with_append << "append text" << std::endl;
in >> s;
std::cout << s << std::endl;
}
return 0;
}
文件的读写(cpp)的更多相关文章
- (转)iOS学习之 plist文件的读写
在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ...
- Qt对ini文件的读写
研究了以下Qt下ini文件的读写,不废话,上干货. 写入ini文件 WriteIni.cpp void WriteIni::writeSettings() { QSettings settings(& ...
- Qt对xml文件的读写
最近研究了一下qt下对xml文件的读写,小计一下,成为自己的知识. main函数调用: #include <QApplication> #include "readconfig. ...
- fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题
问题:在完成课后习题的时候,使用fopen()函数以"a+"方式打开一个不存在的文件时,写入.读取出现错误: //添加用户输入单词后,在单词头加入编号,确保编号跟着前面的开始排序 ...
- QT从入门到入土(三)——文件的读写操作
引言 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt 提供了两种读写纯文本文件的基本方法: 用 QFi ...
- C#对于文件的读写
C#文件的读写操作 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 写入txt文件 /// </summary> ...
- java filechannel大文件的读写
java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个 ...
- c# txt文件的读写
在公司实习,任务不太重,总结一下c#关于txt文件的读写,以便以后有用到的时候可以查看一下.如果有写得不完整的地方还请补充 说明:本人C#水平可能初级都谈不上,高手轻喷,参考:http://www.c ...
- C++中关于文件的读写
在C++的学习过程中,我们时常要用到对文件的操作,下面我们讲一下文件的读写. 首先,读.也就是把已有的文件读到控制台上,那么如何操作呢?首先要将文件操作的输入输出流包含进去. <fstream& ...
随机推荐
- leetcode 864. 获取所有钥匙的最短路径(BFS,状态压缩)
题目链接 864. 获取所有钥匙的最短路径 题意 给定起点,要求在最短步骤内收集完所有钥匙,遇到每把锁之前只有 有对应的钥匙才能够打开 思路 BFS+状态压缩典型题目 先确定起点和总的钥匙数目,其次难 ...
- bash shell关联数组总结
[原创]本博文为原创博文,引用或转发请注明原始出处和链接:https://www.cnblogs.com/dingbj/p/dict_array.html 什么是关联数组? 关联数组相对于索引数组,又 ...
- IE浏览器直接在页面中显示7z文件而不是下载问题解决
IE浏览器中输入7z文件的完整下载URL后,不是保存文件,而是直接在页面中显示(当然是乱码) 这是因为浏览器对不同的资源文件处理的方式不同,例如图片文件,一般会直接打开,所以我们可以不用7z,使用zi ...
- SAP 技术设置(technical setting)
在创建数据库表的时候,需要设置它的技术参数:这样才能使用. 在技术设置里,有个数据类(data class),如APPL0,等等. 有好多值可以供我们选择.这些值保存在表DDART中,表的描述:DD: ...
- Dubbo的设计理念原来就藏在这三张图中
Dubbo在众多的微服务框架中脱颖而出,占据RPC服务框架的半壁江山,非常具有普适性,熟练掌握 Dubbo的应用技巧后深刻理解其内部实现原理,让大家能更好的掌控工作,助力职场,特别能让大家在面试中脱颖 ...
- window.open()打开新窗口教程
使用 window 对象的 open() 方法可以打开一个新窗口.用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串, ...
- CMOS 摄像头的Skipping 和 Binning 模式
在通常的摄像头中,不同的resolution对应不同的帧率.想要提高帧率就要考虑是否需要缩小视野(FOV).若不希望视野缩小,就需要减少resolution. 常用的减少resolution的两种方式 ...
- 网络基础知识之Cisco
2021-01-2313:35:21 大家好,我是新手,刚学完Cisco协议,以后,我会每天都会给大家一些学习笔记 和一些学习心得,这方面不会的可以找我.qq2934896930. 网络的定义: 计算 ...
- Vue基础之生命周期函数[残缺版]!
Vue基础之生命周期函数[残缺版]! 为什么说是残缺版呢?! 因为有一些周期函数我并没有学到!所以是残缺版! 01 beforeCreate //在实例初始化之后,数据观测 (data observe ...
- Bitter.Core系列九:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 WITH 子句支持
有时我们在聚合查询中,经常会有复杂的聚联查询.有时表的聚联查询SQL 子句比较复杂,DBA 会经常告诉们,能否通过WITH 子句优化.WITH 子句,是对SQL 聚联查询的优化.Bitter.Core ...