如何将结构数组写入二进制文件

问题描述 投票:0回答:1

我一直在这个问题上四处寻找,但没有结果,而且谷歌也不是我平常的朋友。基本上我有一个结构数组(基本上是数据库记录),我想将其二进制写入文件。然而,无论我做什么,我得到的文件大小都是 0。我一定错过了一些明显的东西。这是代码:

type Record struct {
    Next_record     int64
    Id              uint32
    First           uint32
    Item_len        uint32
    Item            string
}

我创建了一个包含 100,000 条记录的数组,并已验证该数组包含有效记录。这是我用来编写数组的代码:

var recds []Record

file,err := os.OpenFile("test.bin",os.O_RDWR,0666)
defer file.Close()
if (err != nil) {
        fmt.Println("error on bin file create",err)
        return
}
wBuf := new(bytes.Buffer)
err = binary.Write(wBuf,binary.LittleEndian,&link)
if (err!=nil) {
            fmt.Println("on binary write",err)
            return
    }
_,err = file.Write(wBuf.Bytes())
if (err!=nil) {
        fmt.Println("error binary.writing value",err)
        return
}
file.Close()

我尝试过 file.Create() 而不是 os.Open ,没有区别。我在代码中的任何调用上都没有收到错误。只是一个零长度文件。

任何见解将不胜感激。

go binaryfiles
1个回答
0
投票

来自

binary.Write
的文档:“数据必须是固定大小的值或固定大小值的切片,或者指向此类数据的指针。”

字符串不是固定大小的值,因此不能用

binary.Write
写入(直接或在结构内部)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.