为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中合并两个文本文件

在 Golang 中合并两个文本文件

Go
慕勒3428872 2022-05-10 17:13:47
我正在尝试通过合并来合并两个文本fileACopy.txt文件tmp1.txt。尝试执行此操作时出现的错误是:Cannot use 'fileACopy' (type *File) as type []byte"两个文本文件都有多行字符串,我想保留换行符。我已经导入了io,log和os.我的代码需要如何修改或者我应该使用什么代码?// Append fileACopy.txt to tmp1.txt    fileACopy, err := os.Open("./fileACopy.txt")    if err != nil {        log.Fatal(err)    }    defer fileACopy.Close()    append, err := os.OpenFile("tmp1.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)    if err != nil {        log.Fatal(err)    }    defer append.Close()    if _, err := append.Write(fileACopy); err != nil {        log.Fatal(err)    }    err := os.Remove("fileACopy.txt")    if err != nil {        log.Fatal(err)    }
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

考虑Open和Write的定义:


func Open(name string) (*File, error)

func (f *File) Write(b []byte) (n int, err error)

所以这一行:


fileACopy, err := os.Open("./fileACopy.txt")

给你fileACopy(a *File) 然后你把它作为参数传递给append.Write(fileACopy). 根据上述定义append.Write,[]byte您尝试向其传递不同的 ( fileACopy, a *File),因此出现错误“不能使用 'fileACopy' (type *File) as type []byte”。


实现您想要的最简单的方法可能是使用io.Copy:


Copy(dst Writer, src Reader) (written int64, err error)

在你的情况下io.Copy(append, fileACopy)应该做的伎俩。A,效率较低的替代方法是使用ioutil.ReadAll(以及其他选项)读取文件内容,这将为您提供[]byte然后可以传递给您的文件内容append.Write(这可能效果不佳,因为整个文件被读入内存,然后书面)。


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 514 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信