Mengendalikan Operasi Baca dan Tulis Fail dengan Satu *os.Fail dalam Go
Soalan ini menyerlahkan cabaran biasa dalam mengendalikan fail dalam Pergi, apabila menulis ke fail menggerakkan penunjuk kedudukan semasa, yang berpotensi menghalang operasi baca berikutnya daripada mendapatkan semula yang dijangkakan. data.
Dalam kod yang disediakan, program ini bertujuan untuk menulis 10 baris teks pada fail bernama "test.txt" dan kemudian membacanya kembali. Walau bagaimanapun, kod itu tidak membaca sebarang data dan sebaliknya terus mencetak "Selesai" kerana ralat io.EOF.
Untuk memahami isu ini, adalah penting untuk ambil perhatian bahawa menulis ke os.File mengubah suai fail penunjuk kedudukan. Selepas melengkapkan gelung tulis, penunjuk terletak di hujung fail. Apabila program cuba membaca fail, ia bermula pada kedudukan semasa. Memandangkan penunjuk berada di penghujung, ia serta-merta menemui io.EOF, menandakan tamatnya fail.
Untuk menyelesaikan masalah ini, seseorang mesti menetapkan semula penunjuk kedudukan fail ke permulaan sebelum cuba membaca. Ini boleh dicapai menggunakan kaedah Seek, seperti yang ditunjukkan dalam kod yang diubah suai di bawah:
package main import ( "bufio" "fmt" "io" "os" ) 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) } // reset file pointer _, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) } // 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)) } }
Dengan mengendalikan penuding kedudukan fail dengan betul, program kini boleh berjaya membaca data bertulis daripada fail.
Atas ialah kandungan terperinci Bagaimana untuk Membaca Data Dengan Betul Selepas Menulis ke Fail Menggunakan *os.File Tunggal dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!