93 lines
2.0 KiB
Go
93 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// UpdateInfo 结构体定义
|
|
type UpdateInfo struct {
|
|
Version string
|
|
Date string
|
|
Details string
|
|
}
|
|
|
|
// saveUpdateInfo 函数实现
|
|
func saveUpdateInfo(exePath string, info UpdateInfo) error {
|
|
// 创建一个字节缓冲区
|
|
var buffer bytes.Buffer
|
|
|
|
// 创建一个新的编码器,并将结构体编码到缓冲区
|
|
encoder := gob.NewEncoder(&buffer)
|
|
err := encoder.Encode(info)
|
|
if err != nil {
|
|
return fmt.Errorf("error encoding UpdateInfo: %v", err)
|
|
}
|
|
|
|
// 确保目录存在
|
|
err = os.MkdirAll(exePath, 0755)
|
|
if err != nil {
|
|
return fmt.Errorf("error creating directory: %v", err)
|
|
}
|
|
|
|
// 构建文件路径
|
|
filePath := filepath.Join(exePath, "update-infos")
|
|
|
|
// 将二进制数据写入文件
|
|
err = os.WriteFile(filePath, buffer.Bytes(), 0644)
|
|
if err != nil {
|
|
return fmt.Errorf("error writing to file: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoadUpdateInfo 函数实现
|
|
func LoadUpdateInfo(exePath string) (*UpdateInfo, error) {
|
|
// 构建文件路径
|
|
filePath := filepath.Join(exePath, "update-infos")
|
|
|
|
// 从文件中读取二进制数据
|
|
data, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error reading from file: %v", err)
|
|
}
|
|
|
|
// 创建一个新的解码器,并将二进制数据解码到结构体
|
|
buffer := bytes.NewBuffer(data)
|
|
decoder := gob.NewDecoder(buffer)
|
|
var info UpdateInfo
|
|
err = decoder.Decode(&info)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error decoding binary data: %v", err)
|
|
}
|
|
|
|
return &info, nil
|
|
}
|
|
|
|
func main() {
|
|
// 示例使用
|
|
info := UpdateInfo{
|
|
Version: "1.0.1",
|
|
Date: "2025-04-23",
|
|
Details: "Bug fixes and performance improvements.",
|
|
}
|
|
|
|
err := saveUpdateInfo("./example/path", info)
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
} else {
|
|
fmt.Println("UpdateInfo saved successfully.")
|
|
}
|
|
|
|
loadedInfo, err := LoadUpdateInfo("./example/path")
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
} else {
|
|
fmt.Printf("Loaded UpdateInfo: %+v\n", loadedInfo)
|
|
}
|
|
}
|