最近发现用Go做的工具,在替换文件内容时,末尾时不时出现多余的结束字符。经过检查,原因在于os.OpenFile 打开文件时,采用的 flag 设成了 O_WRONLY|O_CREATE,当文件原有内容长度大于写入内容长度时,末尾就会有未被替换的字符串。
<node>abcde12345fg</node> // old
<node>abcde56789</node> // replace
<node>abcde56789</node>e> // 这里e>看起来就像是多余字符
所以替换应该采用 O_WRONLY|O_TRUNC。perm为 0666。或者直接采用 os.Create(file)。
func Create(name string) (*File, error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
openfile的声明:
func OpenFile(name string, flag int, perm FileMode) (*File, error)