我正在尝试通过将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)
}
最佳答案
func Open(name string) (*File, error)
func (f *File) Write(b []byte) (n int, err error)
所以这行:
fileACopy, err := os.Open("./fileACopy.txt")
给您
fileACopy
(一个*File
),然后将其作为参数传递给append.Write(fileACopy)
。根据上述定义,append.Write
采用了[]byte
,而您尝试将其传递给其他内容(fileACopy
,*File
),因此出现错误“无法将'fileACopy'(类型* File)用作[] byte”。实现所需目标的最简单方法可能是使用io.Copy:
Copy(dst Writer, src Reader) (written int64, err error)
在您的情况下,
io.Copy(append, fileACopy)
应该可以解决问题。一种效率较低的替代方法是使用ioutil.ReadAll(其他选项)来读取文件内容,这将为您提供[]byte
,然后您可以将其传递给append.Write
(这可能无法正常工作,因为整个文件都已读入内存,然后书面)。