美文网首页
C++文件流:夹住一个小朋友咯

C++文件流:夹住一个小朋友咯

作者: 勾莲桑 | 来源:发表于2018-05-25 00:13 被阅读0次

兴致勃勃的时候可以写一大堆,但现在不是。

所以只简单说一下。

建立一个文件流对象,相当于造了一个“夹子”。

夹子是可以DIY的。对应于不同的打开方式。

打开文件,就相当于用这个“夹子”夹住一个小朋友…奥呸,夹住一个文件。

比如像这样:

——————————————————

iostream fin(“D:\\a.txt”,ios::in);

——————————————————

那么文件流类的成员函数又怎么解释呢?

可以这样想象,夹子的另一头还有一个小管子,可以用这个小管子连接到内存。

到此暂停一下,刚才讲了:夹子,夹子夹的文件,夹子背面的管子,内存。

而夹子上夹的文件可以代表外存,而管子又可以连接内存,所以:

文件操作就是内存与外存之间的数据交换。

那么夹子上的管子具体指什么呢?

就是fin.get(),fout.put()这样的函数。

举个例子吧,看下面一段代码:

———————————————————

char temp;

ifstream fin(argv[1]);

ofstream fout(argv[2]);

fin.get(temp);

fout.put(temp);

———————————————————

有了先前的想象,这段代码就可以这样分析:

首先做两个夹子出来,分别夹住两个小朋友(与外存建立的联系)

其中,夹子fin能够从小朋友身体里抽东西出来(输入流:不妨说是成数据从文件“输入”到夹子上)

而夹子fout能够往小朋友身体里注入东西(输出流:数据从夹子“输出”到文件上)

或许“输入输出”这俩货会被经常弄混。

当然夹子只是个中介,它一端已经夹住了小朋友。那么夹子的另一端呢?

夹子的另一端都有管子,显然这两个管子(get( ) & put( ) )都接在了 temp 这个变量上。

而变量是在哪里的?变量是程序运行时在内存里产生的。

所以有了这个管子,就能够实现夹子与内存之间的联系。

也就是说,夹子一端夹住了小朋友,另一端的管子连在了内存上对吧。

这样的话,代码运行的过程就很有趣了:

fin.get(temp);

fin这个夹子从它夹住的小朋友身体里面抽取了一个字符,然后通过管子送给了变量temp的身上。(从外存到内存)

fout.put(temp);

fout这个夹子,它背后插的管子把变量temp给吸出来了,然后又注射到它夹住的小朋友身体里。(从内存到外存)

至此,上面的代码执行完了。实现了第一个文件里面的第一个字符移到了第二个文件里面。

当然,还没结束。

因为夹子仍然还夹着文件上,每个小朋友老是被夹着都不会舒服的吧?

所以我们要把它放开:

—————————————————

fin.close();

fout.close();

—————————————————

这个时候,不仅小朋友被放开了很开心,夹子也很开心。

因为夹子又可以去夹别的小朋友啦!

例如:

—————————————————

fin.open(argv[3]);

—————————————————

这时候想想实验的文件合并的那题,是不是只需要用两个夹子呢?

第一次写的时候我也用了三个夹子。哎呀不重要不重要。

(话说,会不会有人不知道argv是啥子嘞,百度百度~)

有了这种理解作为基础,再去看文件操作作业里面第四题,把Student信息输入到文件里,再读出来打印到屏幕上。和上面的小朋友操作有什么不一样的呢?

其实就是,夹子背面插的管子,不是连接上了temp那样的一个字符型变量里,而是连上了一大坨的什么东西上。怎么解释?

内存吧,你把它看成一个个小箱子。

现在我假设有那么一种小箱子,它正好可以盛下那一坨Student什么东西,然后管子再去连那种那么大的箱子。

连上之后,再用管子从箱子里吸东西到小朋友身体里的时候,正好把一箱子的东西全吸完。或者反方向,从小朋友身体里通过管子往箱子里塞东西的时候,正好能塞满一箱子。

有这样的箱子,Student类的对象就是这样一种箱子。问题是,有那么厉害的管子吗?

废话,没有我还说吗?

我们见过的管子,是get( ) 和 put( ),他俩有点细,一次只能通过一个字符。

而read( )和 write( )这俩管子,一次不仅仅能吸一个字符,重点是,你可以让它想怎么变就怎么变。想一次吸多少东西吸多少东西。

问题是,这个管子怎么用?

简单,就俩件事:

1.告诉它你要把它放在哪里吸

2.告诉它你要让它吸多少出来

在参数上面,显然,第一个就是地址,第二个就是长度,也就是占内存大小。

学会用这个管子之后,我们来实际操作一下。

就拿那个小朋友和箱子举例子。

算了我好累了不写了,自行脑补,一抽一箱子,简直不讲道理。

总之吧,文件操作就是:

夹子夹住了小朋友

塞了一根管子

连在箱子上

而且:

夹子可以有很多种

小朋友也可以有很多个

管子也有好几种

箱子想造什么样造什么样

咳咳~

文件(外存),夹子(流对象),管子(流类成员函数),变量(内存)。

文件流也就这样嘛~

编程语言没多难,重点是思考。

分享给同学们。

相关文章

  • C++文件流:夹住一个小朋友咯

    兴致勃勃的时候可以写一大堆,但现在不是。 所以只简单说一下。 建立一个文件流对象,相当于造了一个“夹子”。 夹子是...

  • C++文件流

    文件读写是几乎所有开发语言中比较基础和重要的应用,C++作为跨平台语言,提供了以流为媒介的操作接口,可以非常方便地...

  • C++ — 文件&流

    C++ 文件和流 到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用...

  • C++ 快速入门笔记:进阶编程

    C++入门笔记:高级编程 文件和流 打开文件void open (const char *filename, io...

  • 【C++】C++文件流操作

    文件操作是每门语言的必学项目,C++中同样如此,且C++中通过流(stream)这一形式进行输入输出、文件读写的控...

  • C++文件流--fstream

    1.fstream类及其几个简单成员函数介绍 相关知识:explicit 2.fstream的标志操作符 3.新建...

  • c++ outfile文件流

    outfile_big_graph << "outfile_big_graph:";在:后面有空格的时候,我用tx...

  • 文件操作

    讲所有记录顺序的写入一个文件→顺序文件:一个有限字符构成的顺序字符流。C++标准库中:ifstream(读取),o...

  • 小朋友学Java(4):构造函数

    一、先看一下C++的构造函数 小朋友学C++(5):构造函数 二、新建Dog.java文件和DogTest.jav...

  • 2021-01-22

    C++文件操作中,对文件流状态的检查通过fail()检测是否顺利,is_open是否打开,eof()是否已经达到文...

网友评论

      本文标题:C++文件流:夹住一个小朋友咯

      本文链接:https://www.haomeiwen.com/subject/gggejftx.html