用C++实现简朴的文件I/O操纵大数据应用

来源:互联网 / 作者:SKY / 2017-11-18 23:38 / 点击:
本文先容的是C++实现简朴的文件的I/O操纵,但愿对你有辅佐,一路来看。
Tech Neo技能沙龙 | 11月25号,九州云/ZStack与您一路切磋云期间收集界线打点实践

文件 I/O C++中比烤蛋糕简朴多了。 在这篇文章里,我会具体表明ASCII和二进制文件的输入输出的每个细节,值得留意的是,全部这些都是用C++完成的。

一、ASCII 输出

为了行使下面的要领, 你必需包括头文件<fstream.h>(译者注:在尺度C++中,已经行使<fstream>代替<fstream.h>,全部的C++尺度头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操纵. 究竟上, <iostream.h> 已经被<fstream.h>包括了, 以是你不必包括全部这两个文件, 假如你想显式包括他们,那任意你。我们从文件操纵类的计划开始, 我会讲授怎样举办ASCII I/O操纵。 假如你猜是"fstream," 恭喜你答对了! 但这篇文章先容的要领,我们别离行使"ifstream"?和 "ofstream" 来作输入输出。

假如你用过尺度节制台流"cin"?和 "cout," 那此刻的工作对你来说很简朴。 我们此刻开始讲输出部门,起首声明一个类工具。

ofstream fout; 

这就可以了,不外你要打开一个文件的话, 必需像这样挪用ofstream::open()。

fout.open("output.txt"); 

你也可以把文件名作为结构参数来打开一个文件.

ofstream fout("output.txt"); 

这是我们行使的要领, 由于这样建设和打开一个文件看起来更简朴. 趁便说一句, 假如你要打开的文件不存在,它会为你建设一个, 以是不消担忧文件建设的题目. 此刻就输出到文件,看起来和"cout"的操纵很像。 对不相识节制台输出"cout"的人, 这里有个例子。

int num = 150;  

char name[] = "John Doe";  

fout << "Here is a number: " << num << "\n";  

fout << "Now here is a string: " << name << "\n"

此刻生涯文件,你必需封锁文件,可能回写文件缓冲. 文件封锁之后就不能再操纵了, 以是只有在你不再操纵这个文件的时辰才挪用它,它会自动生涯文件。 回写缓冲区会在保持文件打开的环境下生涯文件, 以是只要有须要就行使它。 回写看起来像另一次输出, 然后挪用要领封锁。像这样:

fout << flush; fout.close(); 

此刻你用文本编辑器打开文件,内容看起来是这样:

Here is a number: 150 Now here is a string: John Doe

很简朴吧! 此刻继承文件输入, 必要一点能力, 以是先确认你已经大白了流操纵,时代站长网,对 "<<" 和">>" 较量认识了, 由于你接下来还要用到他们。继承…

二、ASCII 输入

输入和"cin" 流很像. 和方才接头的输出流很像, 但你要思量几件工作。在我们开始伟大的内容之前, 先看一个文本:

12 GameDev 15.45 L This is really awesome!

为了打开这个文件,你必需建设一个in-stream工具,?像这样。

ifstream fin("input.txt"); 

此刻读入前四行. 你还记得怎么用"<<" 操纵符往流里插入变量和标记吧?好,?在 "<<" (插入)?操纵符之后,是">>" (提取) 操纵符. 行使要领是一样的. 看这个代码片断.

int number;   

float real;   

char letter, word[8];   

fin >> number; fin >> word; fin >> real; fin >> letter; 

也可以把这四行读取文件的代码写为更简朴的一行。

fin >> number >> word >> real >> letter; 

它是怎样运作的呢? 文件的每个空缺之后, ">>" 操纵符会遏制读取内容, 直到碰着另一个>>操纵符. 由于我们读取的每一行都被换行符支解开(是空缺字符), ">>" 操纵符只把这一行的内容读入变量。这就是这个代码也能正常事变的缘故起因。可是,可别忘了文件的最后一行。

This is really awesome!

假如你想把整行读入一个char数组, 我们没步伐用">>"?操纵符,由于每个单词之间的空格(空缺字符)会中止文件的读取。为了验证:

char sentence[101]; fin >> sentence; 

我们想包括整个句子, "This is really awesome!" 可是由于空缺, 此刻它只包括了"This". 很明明, 必定有读取整行的要领, 它就是getline()。这就是我们要做的。

fin.getline(sentence, 100); 

这是函数参数. 第一个参数显然是用来接管的char数组. 第二个参数是在碰着换行符之前,数组应承接管的最大元素数目. 此刻我们获得了想要的功效:“This is really awesome!”。

你应该已经知道怎样读取和写入ASCII文件了。但我们还不能罢休,由于二进制文件还在等着我们。

三、二进制 输入输出

阅读延展

1
3