我正在尝试通过将fileACopy.txt合并到tmp1.txt来合并两个文本文件。尝试执行此操作时遇到的错误是:

Cannot use 'fileACopy' (type *File) as type []byte"

两个文本文件都有多行字符串,我想保持换行符。我已经导入了iologos

如何修改我的代码或应该使用什么代码?
// 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)
    }

最佳答案

考虑OpenWrite的定义:

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(这可能无法正常工作,因为整个文件都已读入内存,然后书面)。

09-10 07:34