查找与截断以增大(预分配)文件大小

我想为文件预先分配空间。如何增大文件大小?

(*os.File).Seek(size,os.SEEK_SET)
or
(*os.File).Truncate(size)

两者之间有什么区别?


眼眸繁星
浏览 95回答 2
2回答

有只小跳蛙

Seek 函数可以更改打开文件中的当前位置。在后台,此函数仅调用 lseek 系统调用。这允许将文件偏移量设置到文件末尾之外,而无需更改文件大小。如果尝试设置的偏移量大于文件大小,则将获得稀疏文件 - 在偏移空间上具有孔(值为零的连续字节范围)的文件。稀疏文件通过仅存储孔的元数据而不是使用真正的磁盘块来有效利用存储,因此文件的物理大小不会更改:截断函数使用截断系统调用更改文件的大小。此函数更改文件的大小,但与 不同,它不会更改 I/O 偏移量。文件的扩展部分读取为空字节 ('\0'),这将更改物理大小。Seek因此,回答您的问题,您的正确选择将是使用该功能。Truncate

LEATH

截断func Truncate(name string, size int64) errorTruncate 更改了命名文件的大小。如果文件是符号链接,则会更改链接目标的大小。如果存在错误,它将是类型 *PathErrorfunc (*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,您可以读取文件到一定的偏移量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go