Home >Backend Development >Golang >How to edit only specific bytes of a file instead of rewriting the entire file
In programming, we often need to edit and modify files. However, sometimes we only need to modify specific bytes in a file rather than rewriting the entire file. This issue is particularly important for applications that need to process large files or that need to process files efficiently. So, how do you achieve editing only specific bytes of a file? In this article, PHP editor Xinyi will introduce you to the solution to this problem in detail.
I want to create a single file database for storing bytes that emulates how our file system works on a hard drive so that I can write to the database Instead of editing specific bytes while reading (changed or saved by the user) write the entire file to memory, change a few bytes and rewrite the database file back to disk.
How can I use a file handler to change specific bytes in a file without requiring me to load the entire database into memory, make the changes (which does not change the entire file size), and then store it back.
I've tried searching for my query but can't get the answer I'm looking for. I've tried using different modes to open the file handler and maybe give it a try.
Try using 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) } }
The above is the detailed content of How to edit only specific bytes of a file instead of rewriting the entire file. For more information, please follow other related articles on the PHP Chinese website!