golang 读取文件内容,清空文件内容,把读取的内容写入到文件里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | package main import ( "encoding/json" "fmt" "io" "log" "os" ) type PvRelationList struct { Item []PvRelationInfo `json: "item" ` } type PvRelationInfo struct { PodName string `json: "pod_name" ` PodUid string `json: "pod_uid" ` } func readFile(f *os.File) ([] byte , error) { var size int if info, err := f.Stat(); err == nil { size64 := info.Size() if int64( int (size64)) == size64 { size = int (size64) } } size++ // one byte for final read at EOF if size < 512 { size = 512 } data := make([] byte , 0, size) for { if len(data) >= cap(data) { d := append(data[:cap(data)], 0) data = d[:len(data)] } n, err := f.Read(data[len(data):cap(data)]) data = data[:len(data)+n] if err != nil { if err == io.EOF { err = nil } return data, err } } } func isFileEmpty(filePath string ) ( bool , error) { fileInfo, err := os.Stat(filePath) if err != nil { return false , err } return fileInfo.Size() == 0, nil } func main() { filename := "1.log" f, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0666) if err != nil { panic(err.Error()) } defer f.Close() readInfo, err := readFile(f) if err != nil { fmt.Println(err.Error()) } fmt.Printf( "read data %v \n" , string (readInfo)) //write pvRelationList := make([]PvRelationInfo, 0) res, err := isFileEmpty(filename) if err != nil { panic(err.Error()) } if !res { err = json.Unmarshal(readInfo, &pvRelationList) if err != nil { panic(err.Error()) } } pvRelationInfo := PvRelationInfo{ PodName: "ioioiuo" , PodUid: "97492uwoer8u" , } pvRelationList = append(pvRelationList, pvRelationInfo) pvRelationListByte, err := json.Marshal(pvRelationList) if err != nil { panic(err.Error()) } err = f.Truncate(0) if err != nil { panic(err.Error()) } // 将文件指针移动到文件的开始位置 _, err = f.Seek(0, 0) if err != nil { log.Fatalf( "failed to seek file: %s" , err) } fmt.Printf( "write data %v \n" , string (pvRelationListByte)) writeRes, err := f.Write(pvRelationListByte) if err != nil { panic(err.Error()) } fmt.Println(writeRes) } |
posted on 2024-03-29 15:31 running-fly 阅读(80) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)