亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Golang 中刪除大文件的前 N ??個字節?

如何在 Golang 中刪除大文件的前 N ??個字節?

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

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

在大多數文件系統上,您不能從文件的開頭或中間“剪切”出一部分,您只能在末尾截斷它。

最簡單的實現你想要的是打開源文件,跳過你想要剝離的部分(使用搜索),打開目標文件并簡單地從源文件復制到目標文件。

要查找(跳過),請使用File.Seek().?要在文件之間復制,請使用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)

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


這就是您執行最后一步的方法:


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

? ? panic(err)

}


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

? ? panic(err)

}


查看完整回答
反對 回復 2023-04-24
  • 1 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號