3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以將關(guān)閉和重命名文件放在 defer 中:
func main() {
pfile1, _ := os.Open("myfile.log")
defer func(){
pfile1.Close()
os.Rename("myfile.log", "myfile1.log")
}()
...
...
}

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
關(guān)于您的代碼,我有一些不清楚的地方。
首先,為什么要在重命名文件之前打開(kāi)文件?這不是os.Rename函數(shù)所要求的。該函數(shù)采用兩個(gè)表示新舊文件名的字符串,不需要傳遞文件指針。
func main() {
...
...
os.Rename("myfile.log", "myfile1.log")
}
假設(shè)您需要更改文件內(nèi)容(鑒于該ugly_solution方法似乎并非如此)并且您必須打開(kāi)文件,那么為什么要推遲file.Close()?如果需要在同一方法中的某處顯式調(diào)用該方法,則不必推遲該方法。簡(jiǎn)單地調(diào)用它。
func main() {
pfile1, _ := os.Open("myfile.log")
...
...
pfile1.Close()
os.Rename("myfile.log", "myfile1.log")
}

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
在您的示例中的情況
也許你想遵循這個(gè)場(chǎng)景:
輕松創(chuàng)建可識(shí)別的臨時(shí)文件。
寫(xiě)入數(shù)據(jù)。
關(guān)閉文件。
如果成功重命名文件。
在這種情況下,您想遵循底層文件的操作系統(tǒng)系統(tǒng)操作,也許您只想不推遲關(guān)閉 IO.file ,因?yàn)槟M玫疥P(guān)閉函數(shù)本身返回的錯(cuò)誤。
此外,在這種情況下,您可能也想操作 file.sync()。
見(jiàn)https://www.joeshaw.org/dont-defer-close-on-writable-files/
- 3 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)