gpt4 book ai didi

go - WriteFile 中途取消

转载 作者:IT王子 更新时间:2023-10-29 01:42:11 25 4
gpt4 key购买 nike

我目前正在将一些标识符写入文件 last_imported.txt。每次导入标识符时,我都希望文件只包含该标识符。

它看起来像 ioutil.WriteFile("last_import.txt", []byte(id), 0644) 可以完成这项工作,但是它会随机将文件留空而不写入新标识符我在运行时取消作业,模拟突然崩溃。

我怀疑每当它留空时,那是因为从未达到 f.write(data)

func WriteFile(filename string, data []byte, perm os.FileMode) error {
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
return err
}
n, err := f.Write(data)
if err == nil && n < len(data) {
err = io.ErrShortWrite
}
if err1 := f.Close(); err == nil {
err = err1
}
return err
}

如何确保文件不会留空?

最佳答案

您应该使用deferClose() 文件。这会将缓冲区刷新到文件系统。

参见 https://blog.golang.org/defer-panic-and-recover

func WriteFile(filename string, data []byte, perm os.FileMode) error {
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
return err
}

defer f.Close() // <-- ADD THIS to close file *************************

n, err := f.Write(data)
if err == nil && n < len(data) {
err = io.ErrShortWrite
}
if err1 := f.Close(); err == nil {
err = err1
}
return err
}

关于go - WriteFile 中途取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072815/

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