Rumah > pembangunan bahagian belakang > Golang > Mengapa Membaca Dari Fail Sementara Go Gagal Sejurus Selepas Menulis?

Mengapa Membaca Dari Fail Sementara Go Gagal Sejurus Selepas Menulis?

Mary-Kate Olsen
Lepaskan: 2024-12-01 05:58:09
asal
368 orang telah melayarinya

Why Does Reading From a Go Temporary File Fail Immediately After Writing?

Menyelesaikan Isu Baca dalam Pengendalian Fail Sementara Go

Dalam Go, mengakses data daripada fail sementara serta-merta selepas menulis kepadanya boleh menjadi tersandung blok. Berikut ialah pecahan terperinci masalah dan penyelesaiannya:

Masalahnya:

ioutil.TempFile Go mencipta fail sementara, membukanya untuk membaca dan menulis. Walaupun data boleh berjaya ditulis ke fail ini, operasi baca seterusnya gagal. Ini kerana deskriptor fail menghala ke penghujung fail selepas menulis.

Penyelesaian:

Untuk membetulkan isu ini, deskriptor fail mesti dialihkan semula ke permulaan fail sebelum cuba membacanya. Ini boleh dicapai menggunakan kaedah Seek *os.File. Dengan menambahkan tmpFile.Seek(0, 0) sebelum operasi baca, penuding fail ditetapkan semula kepada permulaan fail.

Contoh Kod:

package main

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()

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

Pertimbangan Tambahan:

  • Fail Penutupan: Adalah penting untuk menutup fail sementara selepas digunakan untuk melepaskan sumber sistem. Pernyataan tangguh dalam contoh kod memastikan fail ditutup secara automatik apabila fungsi selesai, mengelakkan kebocoran sumber.
  • Pemadaman Fail: Memadamkan fail sementara juga merupakan langkah penting. Ini biasanya dikendalikan menggunakan os.Remove() selepas fail ditutup. Urutan pelaksanaan untuk penyata tangguh adalah penting, dengan panggilan Tutup mendahului panggilan Alih Keluar untuk memastikan pembersihan sistem yang betul.

Atas ialah kandungan terperinci Mengapa Membaca Dari Fail Sementara Go Gagal Sejurus Selepas Menulis?. 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