thepoy 发表于 2020-6-6 11:10

【Golang】复制文件不完整

本帖最后由 thepoy 于 2020-6-6 20:31 编辑

使用`bufio`包创建Reader和Writer,再用`io.Copy(Writer, Reader)`完成复制,复制的文件和源文件大小会有几k的损失,请问大佬们这是为什么?
代码如下:
```go
func copyFile1(srcFileName, dstFileName string) (written int64, err error) {
      srcfile, err := os.Open(srcFileName)
      if err != nil {
                log.Fatal(err)
      }

      // 获取Reader
      reader := bufio.NewReader(srcfile)

      defer srcfile.Close()

      // 打开目标文件
      dstfile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
      if err != nil {
                log.Fatal(err)
      }

      // 获取Writer
      writer := bufio.NewWriter(dstfile)
      defer dstfile.Close()

      return io.Copy(writer, reader)
}

func main() {
      _, err := copyFile1("/home/thepoy/Pictures/1.png", "/home/thepoy/Downloads/test.png")
      if err != nil {
                log.Fatal(err)
                return
      }
}
```
源文件和复制后的文件:
```
654K6月6 10:46 1.png
652K6月6 10:54 test.png
```

### 已解决
在io.Copy前调用一下writer.Flush()冲洗一下解决此问题。

hjq814380089 发表于 2020-6-6 12:19

io.flush()

kabengqi 发表于 2020-6-6 12:48

最后应该要冲刷一下吧,可以断言一下看看哪里不对。
页: [1]
查看完整版本: 【Golang】复制文件不完整