用C 实现简单的文档I/O操作

2008-02-23 05:24:36来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

文档 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文档了。但我们还不能罢休,因为二进制文档还在等着我们。



标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 程式设计从零开始之表达式

下一篇: C 程式设计从零开始之赋值操作符