Heim >Backend-Entwicklung >Golang >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.
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.
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) } }
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!