C++——文件的读写
C++中标准IO库的fstream头文件定义了三种支持文件IO的类型:
- ifstream,由istream派生而来,提供读文件的功能。
- ofstream,由ostream派生而来,提供写文件的功能。
- fstream,由iostream派生而来,提供读写同一个文件的功能。
一、读文件
1.定义流对象并绑定文件
ifstream infile(ifile.c_str());
上面定义了一个读文件流,提供文件名作为初始化值,相当于打开了特定的文件。
下面的代码与之等同:
ifstream infile;
infile.open(ifile.c_str());
首先定义一个读文件流,然后调用 open 成员函数将已存在的fstream对象与特定文件绑定。
文件名使用的是C风格的字符串,而不是C++中的string类型。
2.检查文件打开是否成功
检验文件打开是否成功是个好习惯。
ifstream infile(ifile.c_str());
if (infile)
{
cout << "Open file successfully." << endl;
infile.close();
}
else
{
cout << "Can not open file." << endl;
}
打开文件之后,就需要开始读文件了,读文件可以有哪些方式呢?
3.逐词读取
string strWord;
while (infile >> strWord)
{
cout << strWord << endl;
}
以这种方式读取时,文本以空白符(空格、tab、换行符等)分开,并且空白符都将丢失。
4.逐行读取(字符数组)
const int iLineLen = 100;
char strLine[iLineLen];
while (infile.getline(strLine, iLineLen))
{
cout << strLine << endl;
}
将行读入字符数组,行之间用换行符区分。
需要注意的是,上面的字符数组长度为100。如果我们读取的行长度大于100会发生什么呢?我试了一下,长度大于100将之间跳出循环,后面的内容就读不了了,具体原因?
5.逐行读取(字符串)
string strLine;
while (getline(infile, strLine))
{
cout << strLine << endl;
}
用这种方式读取时就没有上面的长度问题了。
下面的程序与之等同,使用 eof() 判断是否已经到达文件结尾:
string strLine;
while (!infile.eof())
{
getline(infile, strLine);
cout << strLine << endl;
}
二、写文件
1.定义流对象并绑定文件
与读文件类似,不再赘述。
2.将内容写入文件
outfile << "我爱你" << flush;
用法与cout类似,这段程序首先清空文件,然后将新的内容写进去。
那么,如何不清空之前文件的内容呢——
三、文件模式
打开文件时,无论是调用open还是以文件名作为流初始化的一部分,都需要指定文件模式。如果未指定,则使用默认值。
可以用位操作符设置一个或多个模式。
文件模式:
- in:打开文件做读操作
- out:打开文件做写操作
- app:每次写之前找到文件尾(append,也就是在文件末尾加上新的内容)
- ate:打开文件后,立即将文件定位在文件尾
- trunc:打开文件时清空已存在的文件流
- binary:以二进制模式进行IO操作
比如:
ofstream outfile(ofile.c_str(), ofstream::app);
if (outfile)
{
cout << "Open file successfully." << endl;
outfile << "我爱你" << flush;
}
上面的程序打开文件时指定模式为app,作用是在文件末尾添加“我爱你”。
C++——文件的读写的更多相关文章
- 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& ...
- php高并发状态下文件的读写
php高并发状态下文件的读写 背景 1.对于PV不高或者说并发数不是很大的应用,不用考虑这些,一般的文件操作方法完全没有问题 2.如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件 ...
- INI 文件的读写操作
在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...
- Java程序员的日常—— Properties文件的读写
在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...
- Android 对 properties文件的读写操作
-. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...
- C++学习48 对ASCII文件的读写操作
如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...
- Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】
———————————————————————————————————————————从文件中读写字符串(直接读写/通过NSURL读写) #import <Foundation/Foundati ...
随机推荐
- mongodb中find $ne null 与$exists的区别
$ne null 会把空列表也算入,即使不存在. $exists 的识别效果就比较好 1.插入样例数据 db.nullexistsdemo.insertMany( [{ "name" ...
- 18、属性赋值-@Value赋值
18.属性赋值-@Value赋值 18.1 使用@Value赋值三种方式 基本数值 可以写SPEL 表达式,例如: #{} 可以写${} ,取出配置文件中的值(在运行环境变量里面的值) package ...
- The websites related Laravel 相关网站(内容将不断更新)
https://laraveldaily.com/ 文章内容质量很高
- MySQL 锁(lock与latch)
一.什么是锁 锁机制用于管理对共享资源的并发访问,它是数据库系统区别于文件系统的一个关键特性. 数据库系统使用锁是为了支持对共享资源的并发访问,提供数据的完整性和一致性. InnoDB存储引擎锁的实现 ...
- 一些有用的dll
1.生成excel工具- EPPlus EPPlus.dll 2.生成word工具 - OpenXml DocumentFormat.OpenXml.dll 3.生成条形码工具 - ZXing zx ...
- Win 7 x64 + Visual Studio 2015为WinXP编译可执行程序
造冰箱的大熊猫@cnblogs 2019/9/5 本文承接<Win7下使用Visual Studio为WinXP编译可执行文件>一文. - 在64位Win7(开发机)上,编写基于C的Win ...
- F. Make Them Similar ( 暴力折半枚举 + 小技巧 )
传送门 题意: 给你 n 个数 a[ 1 ] ~ a[ n ], n <= 100: 让你找一个 x , 使得 a[ 1 ] = a[ 1 ] ^ x ~ a[ n ] = a[ n ] ^ ...
- AT3913 XOR Tree(巧妙转换+状压dp)
Step1:首先定义一个点的权值为与其相连边的异或和.那么修改一条路径,权值改变的只有两个端点.边权都为0和点权都为0实质相同. Step2:那么现在和树的结构就没有什么关系了.每次选两个点,然后同时 ...
- codeforces1213G Path Queries 并查集
题意 给定n个结点的树,每条边有边权,有m个询问,每个询问给一个\(q_i\)输出树上有多少点对的简单路径上最大的边权不超过\(q_i\). 分析 用并查集维护点集,同时维护大小. 将所有边按边权排序 ...
- 【CTS2019】珍珠【生成函数,二项式反演】
题目链接:洛谷 pb大佬说这是sb题感觉好像有点过fan...(我还是太弱了) 首先,设$i$这个数在序列中出现$a_i$次,要求$\sum_{i=1}^D[a_i \ mod \ 2]\leq n- ...