本文实验,从一个文件拷贝文件内容到另外一个文件
代码
package main
import (
"fmt"
"io"
"os"
)
func copyFileContents(src, dst string) (err error) {
in, err := os.Open(src)
if err != nil {
return
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return
}
defer func() {
cerr := out.Close()
if err == nil {
err = cer
}
}()
if _, err = io.Copy(out, in); err != nil {
return
}
err = out.Sync()
return
}
func main() {
err := copyFileContents("main.go", "test.test")
if err != nil {
panic(err)
}
fmt.Println("copy success!!!")
}
程序中,将 main.go 的文件内容拷贝到了 test.test 里面
运行代码之后可以查看 test.test内容
总结:
需要注意的是 sync函数
err = out.Sync()
复制完成之后需要判断一下文件状态,
// Sync commits the current contents of the file to stable storage.
// Typically, this means flushing the file system's in-memory copy
// of recently written data to disk.
func (f *File) Sync() error {
if err := f.checkValid("sync"); err != nil {
return er
}
if e := f.pfd.Fsync(); e != nil {
return f.wrapErr("sync", e)
}
return nil
}
sync函数中会调用Fsync()将数据落盘
func (fd *FD) Fsync() error {
if err := fd.incref(); err != nil {
return er
}
defer fd.decref()
_, e1 := fcntl(fd.Sysfd, syscall.F_FULLFSYNC, 0)
return e1
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。