Go での同じファイルの読み取りと書き込み
Go では、os.File タイプを使用するとファイルの操作が簡単になります。ただし、同じファイル ポインターに対して読み取りと書き込みを行おうとすると、問題が発生する可能性があります。この記事では、このようなシナリオに対処し、解決策を示します。
問題:
データをファイルに書き込んで、同じファイルから読み取ろうとしています。ポインタ。ただし、読み取り操作は何も返しません。
コード:
func main() { filename := "test.txt" f, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm) defer os.Remove(filename) // Write 10 times for i := 0; i < 10; i++ { fmt.Fprintf(f, "test%d\n", i) } // Read 10 times r := bufio.NewReader(f) for i := 0; i < 10; i++ { str, _, err := r.ReadLine() if err != nil { if err == io.EOF { fmt.Println("Done") return } fmt.Println("Error", err) } fmt.Println("Read", string(str)) } }
問題:
提供されたコードでは、書き込み操作の後、ファイル ポインタはファイルの末尾に移動します。読み取り操作を試行すると、すぐにファイルの終わりに到達し、io.EOF エラーが発生します。
解決策:
この問題を解決するには、次の手順を実行します。ファイル ポインターを読み取る前に、ファイル ポインターを手動で先頭にシークして戻す必要があります。
_, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) }
このコード スニペットは、読み取りの前に Seek 操作を追加します。ループ。ファイル ポインタをファイルの先頭に設定し、後続の読み取り操作で書き込まれたデータを取得できるようにします。
以上が同じ Go ファイル ポインターに書き込んだ後に読み取ると何も返されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。