Quiero insertar y eliminar algunos caracteres en medio de un archivo.
fopen() y fdopen() solo permiten agregar al final.
¿Hay algún método simple o biblioteca existente que permita estas acciones?
Posibilidades infinitas
Quiero insertar y eliminar algunos caracteres en medio de un archivo.
fopen() y fdopen() solo permiten agregar al final.
¿Hay algún método simple o biblioteca existente que permita estas acciones?
Como ya le han dicho otros, debe hacerlo manualmente y usar fseek para llegar al lugar en el que debe insertar o agregar caracteres. Puede agregar fácilmente nuevos caracteres en el medio haciendo lo siguiente:
Si desea eliminar caracteres en el medio, esto es más complicado. En realidad no se puede hacer un archivo más corto. Tienes dos posibilidades: en la primera, simplemente
En la segunda posibilidad, usted:
El punto cuatro es “complicado”, porque no existe una forma estándar (portátil) de hacerlo. Una posibilidad es utilizar las llamadas al sistema del sistema operativo para truncar el archivo. Otra posibilidad, más simple, es simplemente escribir EOF en el punto 4. El archivo será probablemente más grande de lo que debería ser, pero funcionará.
Muchas gracias amigo, creo que sabes más cosas sobre esto. ¿Podemos hablar un poco de esto en otro lugar?
– Posibilidades infinitas
13 de marzo de 2010 a las 17:22
Estoy interesado en el tema de buscar la posición de un texto en un archivo. ¿Tal vez hay una buena manera o tengo que probar carácter por carácter?
– Posibilidades infinitas
13 de marzo de 2010 a las 17:27
Buscar en un archivo de texto es, sí, básicamente una cuestión de probar carácter por carácter. Pero ese es otro tema totalmente diferente: puede obtener la ayuda de expresiones regulares, por ejemplo.
– Baltasarq
15 de marzo de 2010 a las 9:17
No existe un método sencillo. Tienes que hacerlo manualmente. Por ejemplo:
¡Gracias! Así que tengo que usar “fopen(“1.txt”,”w”);” y luego buscar? 🙂 Según te entiendo, la respuesta es sí a mi pregunta.
– Posibilidades infinitas
12 de marzo de 2010 a las 7:24
@Infinito: Usar fopen("1.txt", "r+")
que se abre para leer y escribiendo. Modo "w"
sobrescribe cualquier archivo que pudiera haber existido previamente, dejándolo con un archivo vacío.
– Greg Hewgill
12 de marzo de 2010 a las 7:25
No entiendo los pasos 2 y 3. Dios mío, ¿te refieres a fragmentar un archivo temporal? o tampón?. la idea que tengo en mente es anexar el tamaño en bytes de lo que se quiere insertar al tamaño en bytes del origen del archivo. y luego escribir al
– Vicente Thorpe
25 de marzo de 2019 a las 20:29
Utilizar buscar función para mover el puntero del archivo a la ubicación adecuada del archivo y luego puede realizar una escritura allí. Pero, para esto, debe saber cuántos bytes desde el final o el principio del archivo es su área preferida para escribir.
JS5
Teniendo en cuenta lo publicado por Baltasarq, escribí las siguientes líneas. Necesita saber la posición en la que desea insertar los caracteres
long Fin;
long lSize;
fseek(fd, 0L, SEEK_END);
Fin = ftell(fd);//get the old file size
fseek(fd, position, SEEK_SET);//"position" must be declared and initialized
char * buffer;
lSize = Fin - position;//length from where you want to insert the chars to the eof
buffer = (char*) malloc(sizeof(char) * lSize);
size_t result = fread(buffer, 1, lSize, fd);//fread (Fin - position) into buffer
fseek(fd, position, SEEK_SET);//fseek to position
fputs(word, fd);//word is a char pointer that contains the text to be inserted
fputs(buffer, fd);//fwrite the buffer
De hecho, usé este código (después de algunas modificaciones) para triplicar las palabras que contienen cada vocal, en un archivo dado.
Se recomienda crear un nuevo archivo con datos insertados. Al finalizar, cambie el nombre y elimine el original.
– chux – Reincorporar a Monica
25 de febrero de 2015 a las 19:26