Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Membaca Data Dengan Betul Selepas Menulis ke Fail Menggunakan *os.File Tunggal dalam Go?

Bagaimana untuk Membaca Data Dengan Betul Selepas Menulis ke Fail Menggunakan *os.File Tunggal dalam Go?

Barbara Streisand
Lepaskan: 2024-12-16 00:31:09
asal
271 orang telah melayarinya

How to Correctly Read Data After Writing to a File Using a Single *os.File in Go?

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))
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan