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

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

如何在 Golang 中刪除大文件的前 N ??個(gè)字節(jié)?

如何在 Golang 中刪除大文件的前 N ??個(gè)字節(jié)?

Go
DIEA 2023-04-24 16:27:41
我有一個(gè)大約10G的大文件,我想刪除這個(gè)文件的前10個(gè)字節(jié)。如果我使用ioutil.ReadFile(),整個(gè)文件將被分配到內(nèi)存中。這是做不到的!另一個(gè)想法是我逐行讀取這個(gè)文件。刪除數(shù)據(jù)后,我應(yīng)該逐行寫(xiě)入剩余數(shù)據(jù)。這樣可以節(jié)省內(nèi)存,但有沒(méi)有更好的辦法呢?喜歡split或文件reader?split
查看完整描述

1 回答

?
揚(yáng)帆大魚(yú)

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

在大多數(shù)文件系統(tǒng)上,您不能從文件的開(kāi)頭或中間“剪切”出一部分,您只能在末尾截?cái)嗨?/p>

最簡(jiǎn)單的實(shí)現(xiàn)你想要的是打開(kāi)源文件,跳過(guò)你想要?jiǎng)冸x的部分(使用搜索),打開(kāi)目標(biāo)文件并簡(jiǎn)單地從源文件復(fù)制到目標(biāo)文件。

要查找(跳過(guò)),請(qǐng)使用File.Seek().?要在文件之間復(fù)制,請(qǐng)使用io.Copy().

這是可以做到的:

fin, err := os.Open("source.txt")

if err != nil {

? ? panic(err)

}

defer fin.Close()


fout, err := os.Create("dest.txt")

if err != nil {

? ? panic(err)

}

defer fout.Close()


// Offset is the number of bytes you want to exclude

_, err = fin.Seek(10, io.SeekStart)

if err != nil {

? ? panic(err)

}


n, err := io.Copy(fout, fin)

fmt.Printf("Copied %d bytes, err: %v", n, err)

請(qǐng)注意,上面的代碼將在新文件中獲取您想要的結(jié)果文件。如果您希望“新”成為舊文件(意味著您不想要不同的文件),則在上述操作之后(如果成功)刪除原始文件并將新文件重命名為舊文件。


這就是您執(zhí)行最后一步的方法:


if err := os.Remove("source.txt"); err != nil {

? ? panic(err)

}


if err := os.Rename("dest.txt", "source.txt"); err != nil {

? ? panic(err)

}


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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