gpt4 book ai didi

golang File WriteString 封面

转载 作者:IT王子 更新时间:2023-10-29 01:44:39 28 4
gpt4 key购买 nike

我想获取文件的increment id,代码如下:

// get increment id
func GetID() uint64 {

appIdLock.Lock()
defer appIdLock.Unlock()

f, err := os.OpenFile(idPath, os.O_RDWR, 0666)
if err != nil {
return 0
}
defer f.Close()

// Read
bufferTemp := make([]byte, 16)
bufferResult := make([]byte, 0)
for {
n, _ := f.Read(bufferTemp)
if n > 0 {
bufferResult = append(bufferResult, bufferTemp[:n]...)
} else {
break
}
}

if len(bufferResult) == 0 {
return 0
}

s := common.StringToUint64(string(bufferResult))
s += 1

// Write (how to cover?)
f.WriteString(strconv.FormatUint(s, 10))

return s
}

f.WriteString 函数被追加,例如,我的文件内容:123,运行 GetID() 我希望我的文件内容是:124,但结果是:123124

最佳答案

在不更改大部分代码的情况下,这里的解决方案可以正常工作并执行您想要执行的操作。没有 loops 或不止一个 byte slice 。

func GetID() uint64 {

appIdLock.Lock()
defer appIdLock.Unlock()

// Added + os.O_CREATE to create the file if it doesn't exist.
f, err := os.OpenFile(idPath, os.O_RDWR + os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return 0
}
defer f.Close()

// Know file content beforehand so I allocate a suitable bytes slice.
fileStat, err := f.Stat()
if err != nil {
fmt.Println(err)
return 0
}


buffer := make([]byte, fileStat.Size())

_, err = f.Read(buffer)
if err != nil {
fmt.Println(err)
return 0
}

s, _ := strconv.ParseUint(string(buffer), 10, 64)
s += 1

// The Magic is here ~ Writes bytes at 0 index of the file.
_, err = f.WriteAt([]byte(strconv.FormatUint(s, 10)), 0)
if err != nil {
fmt.Println(err)
return 0
}

return s
}


希望对您有所帮助!

关于golang File WriteString 封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45808576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com