有沒有一種簡單的方法來追加文件的文件開頭的東西使用文件流?因爲我能想到的唯一方法是將文件加載到緩衝區中,寫入文本到附加文件然後寫入緩衝區。我想知道如果沒有我的緩衝區可以做到這一點。C文件流,附加在開頭
回答
不,不可能。您必須重寫該文件才能在開頭插入文本。
編輯:您能避免讀取整個文件到內存中,如果你使用的臨時文件,即:
- 寫你想插入文件的開始從舊
- 讀取X字節的值文件
- 寫那些X字節到新的文件
- 重複2,3直到你讀完舊文件
- 複製新文件到舊文件。
有沒有簡單的方法,因爲實際操作並不簡單。當文件存儲在磁盤上時,在文件開始之前沒有空的可用字節,所以你不能只把數據放在那裏。對此沒有一個理想的通用解決方案 - 通常,這意味着要複製其餘所有數據,以便騰出空間。
因此,C讓你決定你想如何解決這個問題。
+1表示「在文件開始之前沒有空的可用字節」。 – Mir 2011-01-11 00:43:53
沒有辦法將數據追加到文件的開頭。
提問者還表示,他們認爲解決問題的唯一方法是將整個文件讀入內存並再次寫出。
以下是其他方法。
1)寫一個已知長度爲零的佔位符。只要不超過佔位符大小,您就可以倒回文件處理程序並覆蓋這些數據。一個簡單的例子是在開始時寫入一個unsigned int的大小,它代表將要跟隨的行數,但是直到到達末尾並且可以倒回文件處理程序並重寫正確的值才能填充。
*注意:在不同平臺上的某些版本的'C'會堅持在關閉文件處理程序之前最終將文件處理程序放在文件的末尾,以使其正常工作。
2)將新數據寫入新文件,然後使用文件流將舊數據附加到新文件。刪除舊文件,然後將新文件重命名爲舊文件名。不要使用複製,這是浪費時間。
所有方法都有磁盤大小與內存和CPU使用率的權衡。這完全取決於您的應用需求。
只是想對付一些比較絕對的權利要求在這裏:
有沒有辦法將數據附加到文件的開頭。
不正確的,也有,給予一定的限制。
當文件存儲在磁盤上時,在文件開始之前沒有空的可用字節,因此您不能只將數據放在那裏。
當處理字節流的文件抽象級別時,可能會出現這種情況。但是,文件系統通常將文件存儲爲一系列塊,並且某些文件系統允許在該級別更自由地訪問。
的Linux 4.1+(XFS)和4.2+(XFS,EXT4)允許給予一定你插入孔成使用fallocate
文件,偏移/長度約束:
通常,偏移量和len必須是多的文件系統邏輯塊大小,這取決於文件系統的類型和配置。
StackExchange網站上的示例可以通過網絡搜索'fallocate prepend to file'找到。
- 1. C#附加到打開的文件
- 2. 在附加頭文件中包含頭文件包括路徑
- 3. 無法打開流式文件附件
- 4. NULL在文件的開頭附加的同時使用的toString()
- 5. C++打開文件流
- 6. C++分開頭文件和源文件
- 7. 無法在C++中打開頭文件
- 8. C fread fwrite在文件的開頭
- 9. 文件流創建或附加問題
- 10. 在文件開頭添加數據
- 11. 在c中加載不帶附件的附件文件名#
- 12. 如何在C++文件的開頭添加一行?
- 13. C編程;在文件的開頭添加字符串
- 14. 在將文本附加到文件之前將其添加到文件的開頭
- 15. #include在C/C++頭文件
- 16. 將文本附加到以字符串開頭的所有文件
- 17. 打開包含附加文件(Windows)
- 18. C文件處理:文本不附加在文件末尾
- 19. write()在文件的開頭?
- 20. 從流的開頭
- 21. 「附加到標準流」是什麼意思在碼頭?
- 22. 如何將文件添加到開頭?
- 23. C++頭文件
- 24. 讀取和附加文件同時[C#]
- 25. 在pipedrive中附加文件
- 26. 如何在附加文件
- 27. C/C++頭文件文檔
- 28. Powershell - 在文本文件的開頭添加文本字符串
- 29. 將XML附加到文件而無需從頭開始編寫它?
- 30. Android HTTP頭附件文件名忽略
「在開始處追加」通常稱爲「預先考慮」:) – dreamlax 2011-01-10 23:27:29