So bearbeiten Sie nur bestimmte Bytes einer Datei, anstatt die gesamte Datei neu zu schreiben

WBOY
Freigeben: 2024-02-09 13:36:09
nach vorne
1166 Leute haben es durchsucht

So bearbeiten Sie nur bestimmte Bytes einer Datei, anstatt die gesamte Datei neu zu schreiben

Beim Programmieren müssen wir häufig Dateien bearbeiten und ändern. Manchmal müssen wir jedoch nur bestimmte Bytes in einer Datei ändern, anstatt die gesamte Datei neu zu schreiben. Dieses Problem ist besonders wichtig für Anwendungen, die große Dateien verarbeiten müssen oder die Dateien effizient verarbeiten müssen. Wie erreichen Sie also, dass nur bestimmte Bytes einer Datei bearbeitet werden? In diesem Artikel stellt Ihnen der PHP-Editor Xinyi die Lösung dieses Problems ausführlich vor.

Frageninhalt

Ich möchte eine einzelne Dateidatenbank zum Speichern von Bytes erstellen, die die Funktionsweise unseres Dateisystems auf einer Festplatte nachahmt, sodass ich bestimmte Wörter bearbeiten kann, während ich in die Datenbank schreibe, anstatt Abschnitte zu lesen (die von der Datenbank geändert oder gespeichert wurden). Benutzer) schreibt die gesamte Datei in den Speicher, ändert einige Bytes und schreibt die Datenbankdatei wieder zurück auf die Festplatte.

Wie kann ich einen Dateihandler verwenden, um bestimmte Bytes in einer Datei zu ändern, ohne dass ich die gesamte Datenbank in den Speicher laden, die Änderungen vornehmen (wodurch sich die Größe der gesamten Datei nicht ändert) und sie dann wieder speichern muss?

Ich habe versucht, nach meiner Frage zu suchen, kann aber die gesuchte Antwort nicht finden. Ich habe versucht, den Dateihandler in verschiedenen Modi zu öffnen, und probiere es vielleicht mal aus.

Problemumgehung

Versuchen Sie es mit 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)
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo bearbeiten Sie nur bestimmte Bytes einer Datei, anstatt die gesamte Datei neu zu schreiben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!