gpt4 book ai didi

go - 当我 io.Copy 一个文件时,它不会阻止并且尝试使用它可能会失败,直到它完成

转载 作者:行者123 更新时间:2023-12-05 02:40:38 26 4
gpt4 key购买 nike

我有这段代码(或多或少):

resp, err := http.Get(url)
if err != nil {
// handle error
}

if resp.StatusCode != http.StatusOK {
// handle error
}

out, err := os.Create(filepath)
if err != nil {
return err
}

// Write the body to file
_, err = io.Copy(out, resp.Body)
resp.Body.Close()
out.Close()

我的问题是,如果我立即尝试做某事(例如获取此文件的哈希值),然后我会看到它仍在复制一段时间。

起初我推迟了 out.Close(),但我认为我需要在 io.Copy 之后 out.Close,这将阻塞直到它完成。大概我是这么想的。这没有用,我仍然遇到同样的问题。

如何阻止或等待 io.Copy 操作完成?

谢谢!

最佳答案

可能您正在使用一些磁盘缓冲区/缓存,您的操作系统或磁盘设备在实际持久写入磁盘之前将一些数据保存在内存中。

打电话

out.Sync()

强制执行 fsync 系统调用,这将指示操作系统强制刷新缓冲区并将数据写入磁盘。我建议在 io.Copy 调用返回后调用 out.Flush()

您可能会感兴趣的相关文档:

关于go - 当我 io.Copy 一个文件时,它不会阻止并且尝试使用它可能会失败,直到它完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68475299/

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