2016-12-28 335 views
3

我是Golang的新手,从一些示例开始。目前,我正在尝试的是逐行读取文件,并在满足特定条件的情况下将其替换为另一个字符串。 该文件是用于测试目的包含四条线:用Golang替换文件中的一行

one 
two 
three 
four 

在该文件上工作的代码如下所示:

​​

正如你可以在代码片段看,我想更换字符串“two”和“This is a test”,只要从该文件读取该字符串。 为了得到文件内的当前位置,我使用Go的寻求方法。 但是,什么情况是,总是在最后一行得到由替代这是一个测试,使得看起来像这样的文件:

one 
two 
three 
This is a test 

检查打印语句的输出,将当前文件位置到终端,我得到这样的输出后的第一线已经阅读

2016/12/28 21:10:31 Try to read ... 
2016/12/28 21:10:31 Position in file is: 19 

所以先读取后,位置光标已经指向我的文件的结尾,这解释了为什么新的字符串得到appende d到最后。有人知道这里发生了什么,或者是什么导致了这种行为?

回答

3

读者不是file.Seek的控制器。您已将读者声明为:reader := bufio.NewReader(file),然后您每次只读一行bytes, _, _ := reader.ReadLine(),但file.Seek不会更改读者正在阅读的位置。

建议您阅读文档中的ReadSeeker并切换到使用该文档。还有一个使用SectionReader的例子。

+0

我会进入这个,thx @miltonb :) – pklndnst