iT邦幫忙

1

為何大檔案無法快速在頭文件插入字串?

c c++

為何大檔案無法快速在頭文件插入字串?

資料都是放在硬碟,為何大檔案無法快速在頭文件插入字串?

我查到 : 怎樣追加內容到文件頭部?-CSDN論壇

網友回答:

沒有辦法~
只能重寫文件了~

沒有現成的函數,文件需要重寫。

沒有辦法,如果從開始寫,就會覆蓋後面的內容
唯一的辦法就是將內容組織好,重新寫入文件

但是 sed命令在文件頭部插入文本---BSD和GNU版本通用寫法 - 個人頁面 - OSCHINA - 中文開源技術交流社區
linux 卻有 sed 指令可以在頭部插入字串,讓我很疑惑。 (個人懷疑也是全部覆蓋方式)

1 個回答

1
japhenchen
iT邦大師 1 級 ‧ 2021-04-27 09:07:39
最佳解答

sed也是全部讀出,加字,回存

在Windows下你也可以用BATCH、Powershell或python搞定(可編譯成exe的眾語言也行)

Windows powershell

(gc input.txt -raw) -replace '(.*\n){66}', "`$0$([char]0x0c)" > input.txt

BAT

echo Hello World > combine.txt
type text1.txt >> combine.txt
copy combine.txt text1.txt 
del combine.txt

python3

with open('a.txt', 'r') as original: 
    data = original.read()
with open('a.txt', 'w') as modified: 
    modified.write("Hello world\n" + data)
看更多先前的回應...收起先前的回應...

sed用法我在ubuntu 純console下執行

sed -e '1i Hello world' backup.sql

會自動加斷行碼不用隔行
backup.sql有幾百MB,執行時間沒到尾巴加一行的"瞬間"這麼快,所以推測是..讀出、加字、回寫

我推測應該連尾端追加也是相同的處理方式,只是我們都習慣重導引符號或管線符號的方法來加字,就沒再深究背後的運作方式了

純猜測,如果尾部還有另外的連續空間的話,加入尾部應該不會另外搬位置,如果空間不夠就需要去挪動,加頭部的話通常都需要另外找空間放

對這話題挺有興趣的,希望有人解答下運作原理

要是剛好滿滿的吃光尾端的sector空間.....那不就出現錯誤訊息?要是加的內容超級多,多於原始檔案的內容..
所以應該是使用統一的方法處理append、prepend...而不是用最簡易的在尾端sector用系統底層修改這麼容易了

(prepend意指包括在任何一行前面插入,包括第1行)

我要發表回答

立即登入回答