回答
您將打開文件流,搜索7個新行並在那裏寫入。
大概是這樣的:
int main() {
int number_of_lines = 7;
std::string line;
std::fstream f("f.txt");
while (--lines_n && std::getline(f, line));
f.setp(f.tellg());
f << "writing at 8th line";
return 0;
}
@JoachimPileborg請更新 – 4pie0
如果你想寫線路正是相同的長度(以字節爲單位,不以字符,記住一些編碼(比如:如UTF-8)是可變長度)那麼這很容易:只要跳過前面的七行,然後寫下行。
雖然有一個警告:input streams和output streams有不同的流位置。所以,如果你從combined input/output file stream讀取,那麼只有讀取位置會改變,所以如果你只是試圖直接寫入,那麼你不會寫在相同的位置。要解決此問題,您需要獲取讀取位置,並將寫入位置設置爲相同的值。
作爲替代方案,或者,如果你想要寫的數據的尺寸與現有的數據相同,那麼你必須使用一個臨時的「緩衝」,是它的另一個文件或實際內存緩衝。
如果文件不大,可以使用內存緩衝區,例如使用std::vector
作爲行。將每行讀入矢量,然後修改要修改的行(矢量中的元素)。最後重新打開文件進行寫入,截斷文件,然後將每個「行」寫入文件。
上面有一個小問題,但是當涉及重寫數據時,即如果文件被截斷,然後在寫入文件時出現錯誤,則可能會丟失數據。這可以通過使用臨時文件來解決。
使用臨時文件更容易不用打擾內存緩衝區,而是從原始文件讀取並直接寫入臨時文件。知道什麼時候應該寫點別的東西是通過跟蹤當前的行號完成的,如果你一次讀一行,這很容易。在你的例子中,你從原始文件中讀取前七行並將它們寫入臨時文件,在第七行寫出特殊八行之後,從原始文件中跳過原來的八行,然後繼續讀/寫剩下的線。完成關閉文件後,將臨時文件重命名爲原始文件。
寫入文件截斷該文件到那個長度。 OP想要寫入文件的中間,這並不那麼簡單。 – stark
@stark ['std :: fstream'](http://en.cppreference.com/w/cpp/io/basic_fstream)默認使用'ios :: out | ios :: in'作爲打開時的模式,根據[此參考](http://en.cppreference.com/w/cpp/io/basic_filebuf/open),它與['fopen']相同(HTTP://en.cppreference。com/w/cpp/io/c/fopen)模式'「r +」'這會打開一個用於讀寫的*現有*文件,不會截斷正在執行的操作,並且文件*必須*存在。 –
- 1. 將文本文件的特定行寫入文本文件 - Python
- 2. 如何寫入文本文件中的特定行?
- 3. 讀取和寫入特定行的文本文件與VB.Net
- 4. 將文本寫入文本文件中的特定點C#
- 5. 將文本文件寫入CSV文件中的特定列
- 6. 將文本文件寫入數組並讀取特定行VB
- 7. python如何寫入特定的行在現有的txt文件
- 8. CSV文件寫入,需要寫入特定的行到新的csv文件
- 9. PHP如何寫入文件中的特定行?
- 10. Fortran - 如何將數據寫入文件中的特定行?
- 11. 如何寫入文件中的特定行?
- 12. 如何將python列表寫入csv文件中的特定行?
- 13. 讀取輸入文本文件並寫入特定輸出文件的程序
- 14. 如何通過命令行向文本文件寫入文件?
- 15. 如何從特定行讀取文件並寫入輸出?
- 16. 將數據寫入文本文件中的特定位置
- 17. 如何在java中編寫文本文件的特定位置
- 18. 將特定文本/字符串寫入指定文件夾中存在的每個文件的文本文件
- 19. 如何讓BufferedWriter寫入文本文件?
- 20. 如何寫入文本文件
- 21. 如何將文本寫入XML文件?
- 22. 寫入文件的特定位置
- 23. 如何在unix中的特定行之後插入文本行到文件中
- 24. 寫入文本文件並在特定位置開始
- 25. 在特定位置寫入文本文件?
- 26. 在特定點將文本寫入文件
- 27. PYTHON如何將str輸入文本寫入文本文件
- 28. Erlang:如何將我的輸出寫入文本文件?
- 29. Javascript寫入多行文本文件
- 30. 將一整行寫入文本文件
http://stackoverflow.com/questions/16423538/how-to-write-on-a-specific-line-in-a-file?rq=1 –
是你想要寫的線完全一樣的長度作爲已經存在的線?然後只計算七行(使用例如'std :: getline'),然後寫入文本。如果這些行的長度*不是完全相同,那麼您不得不使用另一個文件或內存作爲臨時存儲。 –
是的他們是相同的長度 – user6207597