一時ファイルに書き込まれたばかりのデータの読み取り
Go では、一時ファイルに書き込まれたばかりのデータを読み取るのが難しい場合があります。データは正常に書き込まれても、すぐに読み取ろうとすると失敗する可能性があります。これは、書き込み操作によりファイル ポインターがファイルの末尾に移動するためです。
この問題を解決するには、データを読み取る前にファイル ポインターを先頭に戻す必要があります。これにより、ファイルの最初のバイトから読み取り操作を開始できるようになります。
実装例:
import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" ) func main() { tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0]))) if err != nil { log.Fatal("Could not create temporary file", err) } defer tmpFile.Close() // Close the file before exiting fmt.Println("Created temp file:", tmpFile.Name()) fmt.Println("Writing some data to the temp file") if _, err = tmpFile.WriteString("test data"); err != nil { log.Fatal("Unable to write to temporary file", err) } else { fmt.Println("Data should have been written") } fmt.Println("Trying to read the temp file now") // Seek the pointer to the beginning tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } if err = s.Err(); err != nil { log.Fatal("error reading temp file", err) } }
この改訂された例では、データを一時ファイルに書き込んだ後、ファイルを読み込む前に、ファイル ポインタは tmpFile.Seek(0, 0) で先頭にリセットされます。これにより、スキャナーは意図したとおりにファイルの先頭からデータを読み取ることができます。
以上がGoで一時ファイルに書き込まれたばかりのデータを読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。