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++——文件的读写的更多相关文章

  1. C#对于文件的读写

    C#文件的读写操作 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 写入txt文件 /// </summary> ...

  2. java filechannel大文件的读写

    java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/   java 读取一个 ...

  3. c# txt文件的读写

    在公司实习,任务不太重,总结一下c#关于txt文件的读写,以便以后有用到的时候可以查看一下.如果有写得不完整的地方还请补充 说明:本人C#水平可能初级都谈不上,高手轻喷,参考:http://www.c ...

  4. C++中关于文件的读写

    在C++的学习过程中,我们时常要用到对文件的操作,下面我们讲一下文件的读写. 首先,读.也就是把已有的文件读到控制台上,那么如何操作呢?首先要将文件操作的输入输出流包含进去. <fstream& ...

  5. php高并发状态下文件的读写

    php高并发状态下文件的读写   背景 1.对于PV不高或者说并发数不是很大的应用,不用考虑这些,一般的文件操作方法完全没有问题 2.如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件 ...

  6. INI 文件的读写操作

    在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...

  7. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  8. Android 对 properties文件的读写操作

    -. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...

  9. C++学习48 对ASCII文件的读写操作

    如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...

  10. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】

    ———————————————————————————————————————————从文件中读写字符串(直接读写/通过NSURL读写) #import <Foundation/Foundati ...

随机推荐

  1. Time travel HDU - 4418 (概率DP)

    对于每个点两个方向(两头只有一个方向)建一个点,然后预处理出每个点走k(1≤k≤n)k(1\le k\le n)k(1≤k≤n)到哪个点,列出方程式高斯消元就行了.记得前面bfsbfsbfs出那些点不 ...

  2. Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}

    C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...

  3. VSCode 插件和快捷键(MAC)

    1. 插件 1. JSON 格式优化---  JSON Tools 快捷键: 1). 格式化json字符串 Mac: Cmd+Option+M win: Ctrl+Alt+M 2).压缩json Ma ...

  4. 【csp模拟赛3】bridge.cpp--矩阵加速递推

    题目描述 穿越了森林,前方有一座独木桥,连接着过往和未来(连接着上一题和下一题...). 这座桥无限长. 小 Q 在独木桥上彷徨了.他知道,他只剩下了 N 秒的时间,每一秒的时间里,他会向 左或向右移 ...

  5. 查询Linux下文件格式.

    备忘 file 命令可以查一个文件的格式 readelf -h 可执行文件名. 可以查询可执行文件的详细的格式 向Windows中exeinfo 软件类

  6. js 选择文本

    怎么用js脚本,选中文本呢? // 获取selection对象 var selection = window.getSelection(); // 清空selection对象 selection.re ...

  7. python的openpyxl的使用笔记

    openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...

  8. python+socket+jq实现web页面实时输出结果

    例如有这样一个需求: 在终端上进行ping操作,现在想把这个这个操作放到web页面上进行,并且实现实时输出的效果. 来分析下具体实现过程 第一步,传统的http请求实现这个有点不太友好,因为这里边是一 ...

  9. puppeteer学习笔记合集

    官方英文版API入口(如果你英文好的话):https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md. 汉化版API入口(网上有 ...

  10. IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)

    场景介绍: 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 ...