Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在Golang中的文件之间追加_File_Go - Fatal编程技术网

File 在Golang中的文件之间追加

File 在Golang中的文件之间追加,file,go,File,Go,我可以像这样在Golang的文件末尾附加任何新内容 f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) if err != nil { panic(err) } defer f.Close() if _, err = f.WriteString(text); err != nil { panic(err) } < >但是,如何在文件中间或在某个特定的行或文本之后?< /p> 在磁盘上,文件(一个字节序

我可以像这样在Golang的文件末尾附加任何新内容

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
    panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
    panic(err)
}
< >但是,如何在文件中间或在某个特定的行或文本之后?< /p> 在磁盘上,文件(一个字节序列)类似于数组存储。

因此,附加到文件中间需要在写入点之后移动字节

然后,假设您有一个索引
idx
,您想在其中追加,还有一些字节
b
要写入。在文件中间添加的最简单(但不一定最有效)的方法是读取文件在<代码> f[IDX:] /<代码>中,编写<代码> B<代码> > <代码> f[IDX:IDX+LeN(b)] < /C>,然后在第一步中写入您所读的字节:

// idx is the index you want to write to, b is the bytes you want to write

// warning from https://godoc.org/os#File.Seek:
// "The behavior of Seek on a file opened with O_APPEND is not specified."
// so you should not pass O_APPEND when you are using the file this way
if _, err := f.Seek(idx, 0); err != nil {
    panic(err)
}
remainder, err := ioutil.ReadAll(f)
if err != nil {
    panic(err)
}
f.Seek(idx, 0)
f.Write(b)
f.Write(remainder)

根据您正在执行的操作,逐行读取文件并将调整后的行写入新文件,然后将新文件重命名为旧文件名可能更有意义。

查找行,在该行之后写入数据,保存文件。你试过这个吗?