首先说明 fp不是外部变量,我是在做一个学生通讯录,运用到子函数Open()打开文件,但是为什么这个子函数里用完fopen()后要fclose()一下?不是应该等所有操作,比如添加学生信息等操作完成保存时再关闭文件吗?
谢谢所有回答和要回答的人,因为只能给一个满意,所以我认真考虑了下,给了一个我认为偏向我问题的人,lzdidiv你的回答也很棒!
那你看完记录后关闭了文件,岂不是将这个文件信息关闭了?不是没有什么用吗?
但是这个子函数【设为open()即A】只进行了文件的读取用的feof功能,真正录入数据或者删除等操作在其他子函数【设为work()即B】,若要将B中数据写入到A所打开的文件中岂不是不行,因为在A中已经fclose?
不是啊,open()中没有写入数据操作,我试着不写fclose程序运行也没问题!还有如果不写会造成什么结果呢?
不写也可以,不过有时会造成文件信息的丢失,为了保险起见,每个子函数中最好加上fclose()将文件关闭。
追问犹豫初学,很是郁闷,因为一旦fclose(fp)一些已有数据或指针不就相当于保存了么,并且释放一些指针地址啊之类的。。。。。所以还是不关闭好啊!?
追答数据保存了但是指针是不会保存的,还有就是释放一些指针地址什么的计算机是会自动进行的,这个不必担心。关闭文件只是保险起见,怕其他外界因素破坏其中的数据,可以举个不太恰当的例子,比如你家的房子没人在家是是关上门家里的东西安全呢,还是开着门安全呢?当然是关上门锁住了,是吧?这只是个例子啊!
本回答被提问者采纳但是这个子函数【设为open()即A】只进行了文件的读取用的feof功能,真正录入数据或者删除等操作在其他子函数【设为work()即B】,若要将B中数据写入到A所打开的文件中岂不是不行,因为在A中已经fclose?
追答如果不fclose的话,文件会被占用,其它地方就无法再修改它
追问其他地方?你指不同的流去对它进行操作?假设我就一个程序对这个文件(txt形式)进行使用就没事了?
追答fopen其实是可以在不fclose的情况下多次打开同一文件,但是极力不推荐,很不安全。其它有些文件操作函数是会锁定文件的,这是刻意为之保证安全性。当然其实在你一个人写的小代码里,这么做是无所谓的,比如一读一写,但是如果有2个写操作就会出问题。
输出等都没有问题,我是对这个文件只进行一个流操作
追答是不是说在子函数中不调用fclose()是不会影响最终的结果的的?如果是,哪你的问题中“但是为什么这个子函数里用完fopen()后要fclose()一下?”矛盾了,这说明在此子函数中不调用也行的。这只是看你在此处对打开的文件有没有进行相关数据的操作,有没有在此确保数据的完整输出。因为stdio库会对数据进行行缓冲,所以在必要的时候使用fclose()是有必要的。其实,当程序正常结束时,会自动对所有打开的文件流调用fclose()的。
追问帅呆了,帅哥