Penso che probabilmente devo usare un oggetto fstream ma non sono sicuro di come. Essenzialmente voglio leggere un file in un buffer di byte, modificarlo, quindi riscrivere questi byte in un file. Quindi ho solo bisogno di sapere come fare l'I/O byte.Leggere e scrivere byte da un file (C++)
risposta
#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();
Dalla memoria penso che questo sia come va.
di solito li renderei dinamici perché non li inserirò tutti in una sola funzione likfe – Craig
È ancora necessario eliminare m_content dopo averlo utilizzato. C++ non ha garbage collection. Anche 1024 byte dovrebbero adattarsi facilmente allo stack in modo da usare solo 'char m_content [1024];' –
^Sì, non dimenticare che: D. – Craig
Durante l'esecuzione di I/O di file, è necessario leggere il file in un ciclo che verifica la fine del file e le condizioni di errore. È possibile utilizzare il codice di cui sopra come questo
while (fileBufferHere.good()) {
filebufferHere.getline(m_content, 1024)
/* Do your work */
}
Se avete a che fare con un file di piccole dimensioni, vi consiglio di leggere l'intero file è più facile. Quindi lavorare con il buffer e scrivere di nuovo l'intero blocco. Questi ti mostrano come leggere il blocco - supponendo di compilare il file di input/output aperto da sopra risposta
// 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
..........
Oppure dovrebbe semplicemente modificare il buffer e scriverlo di nuovo. –
Tutto dipende dal tipo di modifica. Sarebbe più facile se si sostituisse uno a uno di uno o più byte nello stream. Tuttavia, se la modifica aggiunge più byte, può causare un'eccezione di overflow della memoria, che è una trappola comune. –
- 1. C# - Come faccio a leggere e scrivere un file binario?
- 2. Leggere e scrivere int in un file binario in C++
- 3. PHP leggere e scrivere JSON da file
- 4. come leggere byte per byte da un file
- 5. Leggere e scrivere un file in groove
- 6. Come leggere e scrivere un file in C#
- 7. FileStream che blocca un file per leggere e scrivere C#
- 8. VB - Come faccio a leggere e scrivere un file binario?
- 9. È possibile leggere/scrivere bit da un file usando JAVA?
- 10. Convertire da un DataURL a un'immagine in C# e scrivere un file con il byte
- 11. FlatBuffers: scrivere e leggere dal file binario?
- 12. Come leggere e scrivere file xml?
- 13. C# TcpClient, leggere e scrivere stream simultaneamente
- 14. Leggere i primi byte di un file
- 15. Può Fortran leggere i byte direttamente da un file binario?
- 16. Scrivere e leggere da un fifo da due diversi script
- 17. Leggere e scrivere in un file usando VBScript
- 18. Leggere/scrivere i metadati del file usando C/C++
- 19. È possibile leggere e scrivere in un file contemporaneamente?
- 20. Leggere e scrivere sullo stesso file usando lo stesso flusso
- 21. Come leggere un byte e salvare il valore ASCII del byte nel numero intero in C++
- 22. Come faccio a leggere/scrivere file binari?
- 23. In Clojure 1.3, Come leggere e scrivere un file
- 24. Leggere e scrivere su un file mantenendo il blocco
- 25. Come scrivere e leggere un file con una HashMap?
- 26. Scrivere e leggere l'oggetto php in un file di testo?
- 27. Algoritmo veloce multipiattaforma per leggere/scrivere file in C++
- 28. Modo consigliato di leggere e scrivere file .ini in VBA
- 29. Come leggere i bit da un file?
- 30. Utilizzo di C# per leggere/scrivere file Excel (.xls/.xlsx)
Si desidera aprirlo in modalità binaria. – GManNickG
@GManNickG Questo non può essere sottolineato abbastanza. In caso contrario, ti farai sbattere la testa contro il muro per circa un'ora con errori casuali. Ad esempio ... il codice funziona se si inserisce un cout casuale << file_stream.tellg(); 'da qualche parte e non riesce diversamente. – Tibor