Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk mengedit hanya bait tertentu fail dan bukannya menulis semula keseluruhan fail

Bagaimana untuk mengedit hanya bait tertentu fail dan bukannya menulis semula keseluruhan fail

WBOY
Lepaskan: 2024-02-09 13:36:09
ke hadapan
1250 orang telah melayarinya

Bagaimana untuk mengedit hanya bait tertentu fail dan bukannya menulis semula keseluruhan fail

Dalam pengaturcaraan, kita selalunya perlu mengedit dan mengubah suai fail. Walau bagaimanapun, kadangkala kita hanya perlu mengubah suai bait tertentu dalam fail dan bukannya menulis semula keseluruhan fail. Isu ini amat penting untuk aplikasi yang perlu memproses fail besar atau yang perlu memproses fail dengan cekap. Jadi, bagaimanakah anda mencapai pengeditan hanya bait tertentu bagi fail? Dalam artikel ini, editor PHP Xinyi akan memperkenalkan anda kepada penyelesaian kepada masalah ini secara terperinci.

Kandungan soalan

Saya ingin mencipta pangkalan data fail tunggal untuk menyimpan bait yang meniru cara sistem fail kami berfungsi pada cakera keras supaya saya boleh mengedit perkataan tertentu semasa menulis ke pangkalan data dan bukannya bahagian membaca (diubah atau disimpan oleh pengguna) menulis keseluruhan fail ke memori, menukar beberapa bait dan menulis semula fail pangkalan data kembali ke cakera.

Bagaimana saya boleh menggunakan pengendali fail untuk menukar bait tertentu dalam fail tanpa memerlukan saya memuatkan keseluruhan pangkalan data ke dalam memori, membuat perubahan (yang tidak mengubah saiz keseluruhan fail), dan kemudian menyimpannya semula.

Saya telah cuba mencari pertanyaan saya tetapi tidak dapat jawapan yang saya cari. Saya telah mencuba menggunakan mod yang berbeza untuk membuka pengendali fail dan mungkin mencubanya.

Penyelesaian

Cuba gunakan WriteAt:

package main

import (
    "fmt"
    "log"
    "os"
)

const fileName = "test.txt"

func createFile(filename string) error {
    f, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        return fmt.Errorf("cannot create file: %v", err)
    }
    defer f.Close()

    if _, err := f.Write([]byte("Hello, World!")); err != nil {
        return fmt.Errorf("cannot write data to file: %v", err)
    }

    return nil
}

func changeFileByte(filename string, b []byte, pos int64) error {
    f, err := os.OpenFile(filename, os.O_WRONLY, 0644)
    if err != nil {
        return fmt.Errorf("cannot open file: %v", err)
    }
    defer f.Close()

    if _, err := f.WriteAt(b, pos); err != nil {
        return fmt.Errorf("cannot write to file: %v", err)
    }

    return nil
}

func printFile(filename string) error {
    content, err := os.ReadFile(filename)
    if err != nil {
        return fmt.Errorf("cannot read file: %v", err)
    }
    fmt.Printf("%s\n", content)

    return nil
}

func main() {
    if err := createFile(fileName); err != nil {
        log.Fatal(err)
    }

    if err := printFile(fileName); err != nil {
        log.Fatal(err)
    }

    if err := changeFileByte(fileName, []byte{'.'}, 12); err != nil {
        log.Fatal(err)
    }

    if err := printFile(fileName); err != nil {
        log.Fatal(err)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mengedit hanya bait tertentu fail dan bukannya menulis semula keseluruhan fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan