Creo que probablemente tenga que usar un objeto Fstream pero no estoy seguro de cómo. Básicamente, quiero leer un archivo en un búfer de bytes, modificarlo y luego volver a escribir estos bytes en un archivo. Entonces solo necesito saber cómo hacer Byte I/O.Leer y escribir bytes desde un archivo (C++)
Respuesta
#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();
De memoria, creo que así es como funciona.
normalmente las haría dinámicas porque no las pondría todas en una función. Likfe – Craig
Aún necesita eliminar m_content después de usar new. C++ no tiene recolección de basura. También 1024 bytes deberían caber en la pila con bastante facilidad así que solo use 'char m_content [1024];' –
^Sí, no olvide que: D. – Craig
Mientras se realiza la E/S de archivos, tendrá que leer el archivo en un bucle comprobando el final del archivo y las condiciones de error. Puede usar el código anterior como este
while (fileBufferHere.good()) {
filebufferHere.getline(m_content, 1024)
/* Do your work */
}
Si se trata de un tamaño de archivo pequeño, le recomiendo que leer todo el archivo sea más fácil. Luego trabaje con el buffer y escriba todo el bloque de nuevo. Estos le muestran cómo leer el bloque: suponiendo que completa el archivo de entrada/salida abierto desde la respuesta anterior
// 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
..........
O debería simplemente alterar el buffer y volver a escribirlo. –
Todos dependen del tipo de modificación. Sería más fácil si se trata de reemplazo uno a uno de uno o más bytes en la transmisión. Sin embargo, si la alteración le agrega más bytes, puede causar una excepción de desbordamiento de memoria, que es una trampa común. –
- 1. C# - Leer bytes específicos de un archivo
- 2. escribir y leer desde un archivo temporal LaTeX?
- 3. Cómo leer y escribir un archivo en C#
- 4. JAVA: leer y escribir un archivo juntos
- 5. ¿Puede Fortran leer los bytes directamente desde un archivo binario?
- 6. ¿Cómo leer y escribir un HashMap en un archivo?
- 7. Escribir bytes en el archivo
- 8. C#: Leer/Escribir Fecha y hora desde/en XML
- 9. ¿Cómo escribir/leer bits desde/hacia un flujo? (C#)
- 10. phonegap leer y escribir el archivo json
- 11. ¿archivo abierto para leer y escribir?
- 12. Escribir/Leer archivo plist iPhone
- 13. ¿Cómo escribir y leer un archivo con un HashMap?
- 14. Archivo de Python Leer + Escribir
- 15. Leer desde un gran MemoryStream en C#
- 16. escribir y leer un archivo con codificación UTF-8
- 17. Leer y escribir en un archivo mientras mantiene el bloqueo
- 18. Cómo leer y escribir en un archivo usando JavaScript
- 19. ¿Cómo puedo leer y escribir un archivo en Malbolge?
- 20. Leer desde un punto específico en un archivo C++
- 21. Cómo leer y escribir desde el puerto serie
- 22. Escribir y leer el objeto de clase en y desde el archivo binario
- 23. cómo leer y escribir números flotantes desde y hacia archivos binarios?
- 24. ¿Cómo escribir/leer un marco de datos de pandas con MultiIndex desde/hacia un archivo ASCII?
- 25. Agregar y leer desde un archivo de configuración
- 26. ¿Cómo leer todo el texto de un archivo de bytes []?
- 27. ¿Cómo leer un archivo y escribir en un archivo de texto?
- 28. Leer escribir mutex en C++
- 29. Leer valores int desde un archivo de texto en C
- 30. Cómo leer los números desde un archivo ASCII (C++)
Quiere abrirlo en modo binario. – GManNickG
@GManNickG Esto no se puede estresar lo suficiente. Si no lo haces, te golpearás la cabeza contra la pared durante una hora o más con errores al azar. Por ejemplo ... el código funciona si inserta un '' cout << file_stream.tellg(); 'al azar en cualquier otro lugar y falla de lo contrario. – Tibor