2014-01-20 174 views
3

我有一個1TB文件,需要用一個簡單的修改進行修改:刪除第一行或在文件中添加幾個字符。由於空間限制,我不能使用重定向到新文件的命令,也不能使用將整個文件加載到內存中的編輯器。Windows在不創建新文件的情況下修改文本

達到此目的的最佳方法是什麼?

編輯:迄今爲止,我已經找到了最好的工具是放屁http://fart-it.sourceforge.net/但我的文件在UCS-2編碼,這個工具似乎並不支持它

+0

我也遇到了這個問題。我真的想編輯一個文件,而不必製作一個新文件,因爲我的文件很大。非常感謝誰提供一些洞察力! – user1836155

回答

0

這可以用一些相對簡單的C代碼(或C++,或者甚至可能是Python或perl或其他)來完成。但是,不會有備份,所以如果它不正確......那麼這個文件有多重要呢?

插入案例的想法是使用ftruncate()來擴展文件的大小,以包含新位的空間,然後從文件末尾開始工作(以避免覆蓋任何現有的數據),讀取一個塊並將其寫回偏移正確的數量。然後在前面寫入新的數據。

刪除案例將通過查找您想要刪除的第一個字節,並從那裏開始,讀取塊並將它們寫回到文件正面的偏移量,然後在最後, ftruncate()超出文件末尾的額外字節數。

這些顯然不安全的操作,如果它們因任何原因中斷,或者如果執行它們的代碼在手之前沒有經過充分測試 - 但可以完成。購買額外的存儲可以在保留原始文件的同時寫出新文件,這可能會是一個相當好的投資。

1

有沒有簡單的方法以做到這一點任何主流的操作系統/文件系統,因爲它們不支持「在文件開始前添加」或「從文件開始刪除」操作,只能「追加到文件結尾」和「截斷文件」。任何解決方案都需要將整個文件讀入內存,並將其寫回所需的更改。

相關問題