[英]Edit the first line of a huge file in c++
是否有任何“快速”方式在C ++中編輯大文件(〜100Mg)的第一行?
我知道我們可以逐行讀取文件,進行更改,將其寫入臨時文件並重命名該臨時文件。 但是,我想知道是否有一種更快的方法(類似於就地修改)?
您可能可以使用fwrite
/ fprintf
文件操作方法來寫文件,具體取決於文件指針的位置。
您使用fopen
打開文件進行追加,以fseek
開頭並編寫所需內容。 但是,您應該注意第一行的長度。 如果您寫的內容少於原始行,您仍然會剩下多余的內容。 如果您編寫更多內容,則將覆蓋您的其他內容。
在現代計算機上,100MB並不大。 如果這是一次交易,並且您不是在運行速度非常慢的設備上工作,則可以簡單地讀取整個文件,將其拆分為幾行,然后進行編輯並將其全部寫回。
如果這是經常發生的事情,您可以從簡單地在第一行添加一些空白填充(如果可能)中受益,以為您下次可以放置的內容創建一個“緩沖區”,從而從中受益。 然后,您可以使用fwrite覆蓋第一行,而無需觸摸文件的其余部分。
可能存在特定於OS和文件系統的方式,可以在不移動數據的情況下在現有文件內分配更多空間。 例如,在具有XFS / ext4的Linux上,您可以使用fallocate
:
int fallocate(int fd, int mode, off_t offset, off_t len);
fallocate()允許調用方直接為fd引用的文件操作文件分配的磁盤空間,該文件空間的字節范圍從offset開始,直到len個字節。
我相信完成任務的最快方法是創建一個包含第一行值的新文件。 每當您請求讀取文件時,都會先讀取第一個行值文件,然后讀取較大的文件,而跳過實際與較大文件一起存儲的第一行。 每當您想更改第一行時,只需更改第一行文件即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.