5 回答

TA貢獻1877條經(jīng)驗 獲得超6個贊
是的,在使用完一個文件后應該關(guān)閉它,這應該成為一個習慣。如果不關(guān)閉文件,可能會丟失數(shù)據(jù)。因為在向文件寫數(shù)據(jù)時,實現(xiàn)將數(shù)據(jù)輸?shù)骄彌_區(qū),待緩沖區(qū)充滿后才正式輸出給文件,如果當數(shù)據(jù)未充滿緩沖區(qū)而程序結(jié)束運行,就會將緩沖區(qū)中的數(shù)據(jù)丟失。用fclose函數(shù)關(guān)閉文件,他先將緩沖區(qū)中的數(shù)據(jù)輸出到磁盤文件然后才釋放文件指針變量,從而避免了數(shù)據(jù)丟失。
關(guān)閉文件的格式是:
fclose(文件指針);

TA貢獻1770條經(jīng)驗 獲得超3個贊
fopen文件后不一定要fclose,是否fclose按自己需要。
例如,你先用讀的方法打開,看里面有多少個記錄。關(guān)閉文件,接下來動態(tài)分配數(shù)組,用來存放這些數(shù)據(jù)。再打開文件,把數(shù)據(jù)讀入動態(tài)數(shù)組。再關(guān)閉文件。再按添加的方法打開,添加新紀錄。再關(guān)閉文件。
上面,查看數(shù)據(jù)個數(shù),動態(tài)分配,再讀數(shù)據(jù),期間可以不關(guān)閉文件,而用 rewind(fp), 把文件指針放回開始。
上面,讀,添加寫,也可以不關(guān)閉文件,但在第一次打開時,你要按可讀可寫可添加方式打開,
讀寫期間文件指針移動要自己有目的地控制,技術(shù)要求高。
開一次,做單一操作,關(guān)一次,不容易出錯。

TA貢獻2036條經(jīng)驗 獲得超8個贊
如果子函數(shù)中用完fopen()后不調(diào)用fclose()的話,估計你在子函數(shù)中的輸出就會有問題,或者說會丟失數(shù)據(jù)。你試試看(先屏蔽了這個fclose運行看結(jié)果),如果是這樣的話回復我告訴你原因。
其實剛剛看到一樓已經(jīng)說出了本質(zhì)了。只是不知道你的程序到底是怎樣的結(jié)構(gòu)。
或者你
是不是說在子函數(shù)中不調(diào)用fclose()是不會影響最終的結(jié)果的的?如果是,哪你的問題中“但是為什么這個子函數(shù)里用完fopen()后要fclose()一下?”矛盾了,這說明在此子函數(shù)中不調(diào)用也行的。這只是看你在此處對打開的文件有沒有進行相關(guān)數(shù)據(jù)的操作,有沒有在此確保數(shù)據(jù)的完整輸出。因為stdio庫會對數(shù)據(jù)進行行緩沖,所以在必要的時候使用fclose()是有必要的。其實,當程序正常結(jié)束時,會自動對所有打開的文件流調(diào)用fclose()的。
- 5 回答
- 0 關(guān)注
- 2347 瀏覽
添加回答
舉報