首頁 > 後端開發 > Golang > 主體

如何僅編輯文件的特定位元組而不是重寫整個文件

WBOY
發布: 2024-02-09 13:36:09
轉載
1165 人瀏覽過

如何僅編輯文件的特定位元組而不是重寫整個文件

在程式設計中,我們經常需要對檔案進行編輯和修改。然而,有時候我們只需要修改文件中的特定字節,而不是重寫整個文件。這個問題對於需要處理大型文件或需要高效處理文件的應用程式來說尤其重要。那麼,如何實現僅編輯文件的特定位元組呢?在本文中,php小編新一將為您詳細介紹這個問題的解決方案。

問題內容

我想建立一個用於儲存位元組的單一檔案資料庫,該資料庫模擬我們的檔案系統在硬碟上的工作方式,以便我能夠在寫入資料庫而不是讀取時編輯特定位元組(由用戶更改或保存)將整個文件寫入內存,更改幾個位元組並將資料庫文件重寫回磁碟。

如何使用檔案處理程序更改檔案中的特定字節,而不需要我將整個資料庫載入到記憶體中,進行更改(這不會更改整個檔案的大小),然後將其儲存回來。

我已嘗試搜尋我的查詢,但無法獲得我正在尋找的答案。我嘗試過使用不同的模式來開啟文件處理程序,也許還可以嘗試。

解決方法

嘗試使用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)
    }
}
登入後複製

以上是如何僅編輯文件的特定位元組而不是重寫整個文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!