我想我可能不得不使用fstream對象,但我不知道如何。本質上,我想將文件讀入字節緩衝區,對其進行修改,然後將這些字節重寫爲文件。所以我只需要知道如何做字節I/O。從文件讀取和寫入字節(C++)
5
A
回答
7
#include <fstream>
ifstream fileBuffer("input file path", ios::in|ios::binary);
ofstream outputBuffer("output file path", ios::out|ios::binary);
char input[1024];
char output[1024];
if (fileBuffer.is_open())
{
fileBuffer.seekg(0, ios::beg);
fileBuffer.getline(input, 1024);
}
// Modify output here.
outputBuffer.write(output, sizeof(output));
outputBuffer.close();
fileBuffer.close();
從記憶我認爲這是怎麼回事。
0
在執行文件I/O時,您必須在循環中讀取文件,以檢查文件結尾和錯誤條件。您可以使用上面的代碼是這樣
while (fileBufferHere.good()) {
filebufferHere.getline(m_content, 1024)
/* Do your work */
}
1
如果你正在處理的文件尺寸小,我建議在閱讀整個文件更容易。然後使用緩衝區並再次寫入整個塊。這些告訴你如何讀取塊 - 假設你在打開的輸入/輸出文件從上面的回覆
// open the file stream
.....
// use seek to find the length, the you can create a buffer of that size
input.seekg (0, ios::end);
int length = input.tellg();
input.seekg (0, ios::beg);
buffer = new char [length];
input.read (buffer,length);
// do something with the buffer here
............
// write it back out, assuming you now have allocated a new buffer
output.write(newBuffer, sizeof(newBuffer));
delete buffer;
delete newBuffer;
// close the file
..........
+0
或者應該改變緩衝區並將其寫回。 – 2010-02-19 00:40:39
+0
全部取決於修改類型。如果它只是在流中的一個或多個字節的一對一替換,會更容易。但是,如果更改添加更多字節,它可能會導致內存溢出異常 - 這是一個常見的錯誤。 – 2010-02-19 00:49:31
相關問題
- 1. 從字節讀取/寫入[]
- 2. 讀取和寫入字節(從/在文件中)
- 3. Java寫入和從文件讀取字節
- 4. C寫入和從套接字讀取
- 5. 用c從/中讀取/寫入文件
- 6. C++如何讀取和寫入文件
- 7. 正在讀取和寫入文件C++
- 8. C中的文件讀取和寫入
- 9. C++ fstream讀取和寫入文件
- 10. 麻煩讀取和寫入文件c#
- 11. C:同時讀取和寫入文件
- 12. 無法讀取和寫入文件C
- 13. 在C++中讀取和寫入文件
- 14. Unicode文件寫入和C++讀取?
- 15. 讀取和寫入文件C++
- 16. 如何讀取/寫入C#文件的前128個字節?
- 17. 讀取字節數組與將字節數組寫入文件
- 18. 從文件讀取和寫入文件的問題C
- 19. 簡單的寫入和讀取字節
- 20. 寫入/讀取字節數組從/到文件java
- 21. 從txt文件讀取和寫入
- 22. 從文件讀取和寫入
- 23. 寫入和從文件中讀取
- 24. 從csv文件讀取和寫入
- 25. 從python中讀取和寫入文件
- 26. Android - 從文件讀取和寫入
- 27. 從文件讀取和寫入
- 28. 從plist文件中寫入和讀取
- 29. 讀取和寫入文件
- 30. 讀取和寫入文件
你想以二進制方式打開它填滿。 – GManNickG 2010-02-18 02:33:04
@GManNickG這個不能太強調。如果不這樣做,會導致你用隨機的錯誤將你的頭撞在牆上一個小時左右。 例如,如果你插入一個隨機的'cout << file_stream.tellg();'在某處並且否則失敗,代碼將起作用。 – Tibor 2012-08-09 14:49:33