我正在研究golang中需要索引最近添加的文件內容的項目(使用名爲bleve的框架),並且正在尋找解決方案以獲取自上次修改以來文件的內容。我目前的解決方法是記錄每個文件的最後索引位置,並且在稍後的索引過程中,我只從以前記錄的位置開始檢索文件內容。如何獲取自上次修改以來文件的添加內容
所以我想知道是否有任何庫或內置功能? (不需要限制,任何語言都可以工作)
如果有人比我的工作環境更好,我會非常感激!
感謝
我正在研究golang中需要索引最近添加的文件內容的項目(使用名爲bleve的框架),並且正在尋找解決方案以獲取自上次修改以來文件的內容。我目前的解決方法是記錄每個文件的最後索引位置,並且在稍後的索引過程中,我只從以前記錄的位置開始檢索文件內容。如何獲取自上次修改以來文件的添加內容
所以我想知道是否有任何庫或內置功能? (不需要限制,任何語言都可以工作)
如果有人比我的工作環境更好,我會非常感激!
感謝
這取決於文件如何更改。
如果這些文件是僅附加的,那麼您只需要記錄停止索引的最後一個偏移量,然後從那裏開始。
如果更改可能發生在任何地方,並且更改大多會用新字節替換舊字節(如更改圖像像素),那麼也許您可以考慮計算小卡盤的校驗和,並且只索引那些不同的塊校驗。
您可以在Go標準庫中查看crypto
包進行計算哈希。
如果更改是對文本文件的行插入/刪除(如對源代碼的更改),那麼也許差異算法可以幫助您找到差異。類似https://github.com/octavore/delta。
如果你在一個類Unix系統上運行,你可以只使用tail
。如果您指定遵循該文件,則該過程將在文件結束後繼續等待。你可以在你的程序中用os/exec
來調用它,然後將Stdout傳送到你的程序中。您的程序可以定期或通過阻止來讀取它。
我能想到在Go中原生做這件事的唯一方法就像你所描述的那樣。還有一個庫試圖在Go中模擬tail
這裏:https://github.com/hpcloud/tail