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

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

查找與截斷以增大(預分配)文件大小

查找與截斷以增大(預分配)文件大小

Go
眼眸繁星 2022-08-15 17:36:10
我想為文件預先分配空間。如何增大文件大???(*os.File).Seek(size,os.SEEK_SET) or (*os.File).Truncate(size)兩者之間有什么區別?
查看完整描述

2 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

Seek 函數可以更改打開文件中的當前位置。在后臺,此函數僅調用 lseek 系統調用。這允許將文件偏移量設置到文件末尾之外,而無需更改文件大小。如果嘗試設置的偏移量大于文件大小,則將獲得稀疏文件 - 在偏移空間上具有孔(值為零的連續字節范圍)的文件。稀疏文件通過僅存儲孔的元數據而不是使用真正的磁盤塊來有效利用存儲,因此文件的物理大小不會更改:

http://img1.sycdn.imooc.com//62fa13ad0001b35206280659.jpg

截斷函數使用截斷系統調用更改文件的大小。此函數更改文件的大小,但與 不同,它不會更改 I/O 偏移量。文件的擴展部分讀取為空字節 ('\0'),這將更改物理大小。Seek

因此,回答您的問題,您的正確選擇將是使用該功能。Truncate


查看完整回答
反對 回復 2022-08-15
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

截斷

func Truncate(name string, size int64) error
Truncate 更改了命名文件的大小。如果文件是符號鏈接,則會更改鏈接目標的大小。如果存在錯誤,它將是類型 *PathError

func (*File) 尋找

func (f *File) Seek(offset int64, wherece int) (ret int64, err error)
Seek 設置下一個讀取或寫入文件的偏移量以進行偏移,并根據以下位置進行解釋:0 表示相對于文件的原點,1 表示相對于當前偏移量,2 表示相對于結束。它返回新的偏移量和錯誤(如果有)。未指定對使用 O_APPEND 打開的文件執行 Seek 的行為。

如果 f 是一個目錄,則 Seek 的行為因操作系統而異。您可以在類Unix操作系統上查找目錄的開頭,但在Windows上則不然。

因此,使用截斷,您可以將文件大小更改為設置的大小,使用see,您可以讀取文件到一定的偏移量。


查看完整回答
反對 回復 2022-08-15
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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