1 回答

TA貢獻1744條經(jīng)驗 獲得超4個贊
我在這里看到的問題是您沒有將文件句柄的光標(biāo)倒回到文件的開頭。因此,下一次讀取將在文件末尾,并且將是 0 字節(jié)讀取。這就解釋了為什么文件中似乎沒有內(nèi)容。
https://pkg.go.dev/os#File.Seek可以為您處理。
實際上,這Flush
無關(guān)緊要,因為您使用相同的文件句柄來讀取文件而不是寫入文件,因此即使沒有刷新,您也會看到自己寫入的字節(jié)。如果文件由不同的進程打開或重新打開,則不會出現(xiàn)這種情況。
編輯:OP聲稱在他們的情況下這種沖洗是必要的,我不能提供不同意的證據(jù)。沖洗也不會傷害任何東西。
示范:
package main
import (
"fmt"
"io"
"os"
)
func main() {
f, err := os.CreateTemp("", "data.csv")
if err != nil {
panic(err)
} else {
defer f.Close()
defer os.Remove(f.Name())
}
fmt.Fprintf(f, "hello, world")
fmt.Fprintln(os.Stderr, "Before rewind: ")
if _, err := io.Copy(os.Stderr, f); err != nil {
panic(err)
}
f.Seek(0, io.SeekStart)
fmt.Fprintln(os.Stderr, "\nAfter rewind: ")
if _, err := io.Copy(os.Stderr, f); err != nil {
panic(err)
}
fmt.Fprintln(os.Stderr, "\n")
}
% go run t.go
Before rewind:
After rewind:
hello, world
- 1 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報