【发布时间】:2019-06-26 01:10:29
【问题描述】:
我想从 Go 中的文件中删除最后 N 个字节,
【问题讨论】:
我想从 Go 中的文件中删除最后 N 个字节,
【问题讨论】:
其实这已经实现的是os.Truncate()函数。但是这个函数需要新的大小。因此,要使用它,您必须首先获取文件的大小。为此,您可以使用os.Stat()。
将其包装成一个函数:
func truncateFile(name string, bytesToRemove int64) error {
fi, err := os.Stat(name)
if err != nil {
return err
}
return os.Truncate(name, fi.Size()-bytesToRemove)
}
用它来删除最后 5000 个字节:
if err := truncateFile("C:\\Test.zip", 5000); err != nil {
fmt.Println("Error:", err)
}
另一种选择是为此使用File.Truncate() 方法。如果我们有一个os.File,我们也可以使用File.Stat() 来获取它的大小。
这就是它的样子:
func truncateFile(name string, bytesToRemove int64) error {
f, err := os.OpenFile(name, os.O_RDWR, 0644)
if err != nil {
return err
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
return err
}
return f.Truncate(fi.Size() - bytesToRemove)
}
使用它是一样的。如果我们正在处理一个文件(我们已经打开它)并且我们必须截断它,这可能会更好。但在这种情况下,您需要将 os.File 而不是其名称传递给 truncateFile()。
注意:如果您尝试删除的字节数超过文件当前的字节数,truncateFile() 将返回错误。
【讨论】:
os.Truncate() 中实现了。请参阅编辑后的答案。