Quiero hacer modificaciones en el medio de un archivo de texto usando C++, sin alterar el resto del archivo. ¿Cómo puedo hacer eso?Cómo sobrescribir solo parte de un archivo en C++
Respuesta
Si la cadena de reemplazo tiene la misma longitud, puede realizar el cambio en su lugar. Si la cadena de reemplazo es más corta, es posible que pueda rellenarla con espacios de ancho cero o similares para convertirla en la misma cantidad de bytes y realizar el cambio en su lugar. Si la cadena de reemplazo es más larga, simplemente no hay espacio suficiente a menos que mueva primero todos los datos restantes.
Eso suena bien, pero ¿cuál es el código para eso? Supongamos que la cadena tiene la misma longitud. – neuromancer
Bueno, depende de qué biblioteca de E/S esté utilizando, la biblioteca estándar de C, la biblioteca estándar de C++ o una API específica del sistema operativo. Pero generalmente hay tres pasos. Al abrir el archivo, especifique el acceso de escritura sin truncamiento, p. fopen (fname, "r +"). Busque en la ubicación deseada, p. Fseek. Escriba la nueva cadena con, por ejemplo, fwrite o fprintf. En algunas API, como Windows OVERLAPPED o linux aio, puede decir "escribir en esta ubicación" sin un paso de búsqueda por separado. –
fseek no funciona con ofstream. ¿Cómo se puede hacer con ofstream? – neuromancer
Generalmente, abra el archivo para leer en modo texto, lea línea tras línea hasta el lugar que desea cambiar, mientras lee las líneas, escríbalas en un segundo archivo de texto que abrió para escribir. En el lugar del cambio, escriba en el segundo archivo los datos nuevos. Luego continúe la lectura/escritura del archivo hasta su final.
Quiero evitar hacerlo de esta manera. – neuromancer
Use std :: fstream.
El std :: ofstream más simple no funcionaría. Truncaría su archivo (a menos que use la opción std :: ios_base :: app, que de todos modos no es lo que quiere).
std::fstream s(my_file_path); // use option std::ios_base::binary if necessary
s.seekp(position_of_data_to_overwrite, std::ios_base::beg);
s.write(my_data, size_of_data_to_overwrite);
Si usa el indicador 'std :: ios_base :: binary', no olvide que lo necesitará o esto con' std :: ios_base :: out' – qbert220
Usando 'std :: ios_base :: binary | Los indicadores del modo std :: ios_base :: out' provocan el truncamiento después de los datos escritos en el archivo. Usando 'std :: ios_base :: binary | std :: ios_base :: out | std :: ios_base :: in' previene esto. – qbert220
Entonces, ¿** tengo ** para abrir el archivo para leer y escribir para modificar parte del archivo, incluso si en realidad * nunca * leí? ¿Es posible modificar (no agregar) el acceso de escritura ** solo ** sin sobreescribirlo todo? Quizás fseek en sí mismo requiere que el archivo esté abierto para la lectura, incluso si no se usa fread? (Aunque esto me parece extraño) Finalmente, ¿esto es una limitación del sistema operativo, o simplemente cómo funciona la biblioteca estándar de C++? – Dexter
- 1. cómo sobrescribir datos en un archivo txt?
- 2. Actualizar solo parte de un archivo binario con C++
- 3. Cómo deserializar solo parte de un documento XML en C#
- 4. ¿Cómo compilar solo un archivo en C#?
- 5. sobrescribir en medio de un archivo
- 6. C++ sobrescribir datos en un archivo en una posición particular
- 7. Lea y sobrescribir un archivo en Python
- 8. FFT en un solo archivo de C-
- 9. Leer solo una parte de un archivo del disco en Object-C
- 10. ¿Cómo sobrescribir algunos bytes de un archivo binario con dd?
- 11. ¿Es posible descargar solo parte de un archivo ZIP (por ejemplo, un archivo)?
- 12. Windows: Sobrescribir archivo en uso
- 13. Cómo escribir datos en un archivo de texto en C# sin sobrescribir los datos actuales
- 14. Cómo sobrescribir la salida estándar en C
- 15. Django: ¿Cómo reemplazar/sobrescribir/actualizar/cambiar un archivo de FileField?
- 16. cómo descargar un solo archivo con varios subprocesos en C#
- 17. ¿Cómo abro un archivo si solo conozco parte del nombre del archivo?
- 18. Mostrando solo una parte de un div
- 19. ¿Cómo puedo desactivar ARC en solo una parte de un archivo, no todo?
- 20. ¿Cómo hacer un archivo de "solo lectura"?
- 21. ¿Cómo sobrescribir los archivos existentes en lote?
- 22. Sobrescribir línea en archivo con PHP
- 23. ¿Cómo dibujar solo esta parte del arco?
- 24. Cómo marcar un solo archivo en GIT
- 25. Lectura solo en una parte de un archivo Stata .DTA en R
- 26. Cargando solo parte de un archivo de mapa de bits en Android
- 27. leer parte de un archivo con iostreams
- 28. ¿Cómo puedo saber si un archivo está abierto en otra parte de C en Linux?
- 29. ¿Cómo sobrescribir register_argc_argv en PHP?
- 30. ¿Cómo sobrescribir una función en otro archivo javascript?
Esto no es un duplicado. La publicación anterior solo trataba sobre cómo leer un registro, se trata de escribir en un archivo. Necesita leer más detenidamente. – neuromancer
Su elaboración de que el reemplazo es de la misma longitud hace que la carne de la pregunta sobre cómo reposicionar el puntero al archivo, que es exactamente lo que proporcionaron las respuestas a su otra pregunta. –