5 回答

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

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

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