2017-02-15 53 views
1

請注意,我不問如何在文件末尾添加文本。我在問如何將文本預先添加到文件的開頭。如何將文本預處理到Swift或Objective C中的文件?

let handle = try FileHandle(forWritingTo: someFile) 
//handle.seekToEndOfFile() // This is for appending 
handle.seek(toFileOffset: 0) // Me trying to seek to the beginning of file 
handle.write(content) 
handle.closeFile() 

好像我content是在文件的開頭寫入,但它只是替換現有的同意,以及...謝謝!

回答

3

一般來說,大多數文件系統沒有內置的支持將數據預先存入文件。同樣,大多數文件I/O API也不是。

爲了預先存儲數據,首先必須將所有現有數據沿文件進一步移動,以便在開始時爲新數據騰出空間。您通常會在接近尾聲時開始讀取數據,將數據寫入原始位置加上您希望最終預先添加的數據長度,然後使用接近文件開頭的下一個塊重複執行此操作。這樣,你逐漸將所有東西都轉移了下來。只有在完成所有這些後,才能安全地將新數據安全地寫入文件的開頭。

坦率地說,如果有什麼辦法可以避免這種情況,您應該嘗試。如果文件很大並且/或者您經常這樣做,則性能可能會很差。

+0

是的,我發現一個非常好的方式來在Linux中執行它,就像'echo「文本預先加載$(cat file.txt)」> file.txt'一樣,但是正如你所說的那樣,這並不簡單。 – 7ball

3

一個合理的解決方案是將新內容寫入臨時文件,然後將現有內容追加到臨時文件的末尾。然後將臨時文件移到舊文件上。

當您尋找現有文件中的某個點然後執行寫入操作時,將從該點覆蓋現有內容。這就是你目前的方法失敗的原因。

相關問題