兴致勃勃的时候可以写一大堆,但现在不是。
所以只简单说一下。
建立一个文件流对象,相当于造了一个“夹子”。
夹子是可以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.告诉它你要让它吸多少出来
在参数上面,显然,第一个就是地址,第二个就是长度,也就是占内存大小。
学会用这个管子之后,我们来实际操作一下。
就拿那个小朋友和箱子举例子。
算了我好累了不写了,自行脑补,一抽一箱子,简直不讲道理。
总之吧,文件操作就是:
夹子夹住了小朋友
塞了一根管子
连在箱子上
而且:
夹子可以有很多种
小朋友也可以有很多个
管子也有好几种
箱子想造什么样造什么样
咳咳~
文件(外存),夹子(流对象),管子(流类成员函数),变量(内存)。
文件流也就这样嘛~
编程语言没多难,重点是思考。
分享给同学们。
网友评论