第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 golang 中重命名之前關(guān)閉文件

在 golang 中重命名之前關(guān)閉文件

Go
慕森卡 2021-12-20 15:19:42
當(dāng)我使用 golang 進(jìn)行一些文件操作時(shí),我首先打開(kāi)一個(gè)文件并將 close() 添加到 defer 列表中,然后我嘗試重命名該文件。如果我手動(dòng)關(guān)閉文件,延遲將再次關(guān)閉它。如果我等待延遲關(guān)閉它,重命名將導(dǎo)致錯(cuò)誤,因?yàn)樗鼪](méi)有關(guān)閉是的。代碼如下func main() {    pfile1, _ := os.Open("myfile.log")    defer pfile1.Close() //It will be closed again.    ...    ...    pfile1.Close() //I have to close it before rename it.    os.Rename("myfile.log", "myfile1.log")}我發(fā)現(xiàn)了一些丑陋的解決方案,例如創(chuàng)建另一個(gè)函數(shù)來(lái)分隔打開(kāi)的文件,下面有更好的解決方案嗎?func main() {    var pfile1 *os.File    ugly_solution(pfile1)    os.Rename("myfile.log", "myfile1.log")}func ugly_solution(file *os.File) {    file, _ = os.Open("myfile.log")defer file.Close()}
查看完整描述

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")   

    }() 

    ...

    ...

}


查看完整回答
反對(duì) 回復(fù) 2021-12-20
?
largeQ

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")

}


查看完整回答
反對(duì) 回復(fù) 2021-12-20
?
慕哥6287543

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/


查看完整回答
反對(duì) 回復(fù) 2021-12-20
  • 3 回答
  • 0 關(guān)注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)