Pregunta

Estoy abriendo un archivo y obteniendo un QTEXTStream. Luego estoy leyendo la línea de transmisión por línea usando Readline (). Cuando la línea coincide con una determinada cadena, necesito reemplazarla con otra cadena. Necesito que el comportamiento sea que la línea sea completamente reemplazada (es decir, si la línea era "Longword" y lo reemplazo con "palabra", la línea debe contener "palabra" y "palabra" solamente).

Por el momento estoy usando Seek () y luego el operador << para poner mi cadena en la ubicación dada, pero los restos de la última cadena permanecen, por lo que me queda algo como "Wordword". ¿Cómo puedo evitar que esto suceda y asegurar que toda la línea anterior se reemplace por mi nueva?

¿Fue útil?

Solución

Que yo sepa, no puede simplemente eliminar una parte de un archivo de texto en el lugar. Si la cadena de reemplazo era de tamaño idéntica, es posible que pueda reemplazar esos bytes exactos, y si fuera más corto, podría piratear el problema llenando el espacio vacío con nulos.

Si no quisiera hacer eso, tendría que crear un archivo nuevo, leer cada línea desde el archivo anterior, realizar cualquier cambio requerido en esa línea en la memoria, luego escribir esa línea en el nuevo archivo. Una vez que esto esté completo, puede reemplazar el archivo original con el nuevo archivo.

Si fuera posible agregar/eliminar fragmentos a/desde el archivo, lo más probable es que se quede con un archivo considerablemente fragmentado en el HDD. Si necesitara insertar más caracteres, tendrían que crearse fragmentos adicionales, ya que los nuevos datos simplemente no podían caber en la cantidad de espacio ocupado por los datos antiguos, y eliminar los datos dejaría agujeros en el archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top