C/Visual C - Reservar espacio en archivo

 
Vista:
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Reservar espacio en archivo

Publicado por carlos (95 intervenciones) el 06/12/2023 11:15:36
¿Hay algún metodo o funcion para que al sobreescribir en un archivo no sustituya sino que se añada
Por ejemplo

Consuelo
Que cuando añada sea Cons123uelo y no sea Cons123o

Estoy probando con
fwrite
fputs pero no logro encontrar ninguno que lo haga cabe destacar que no es un archivo vacio sino que es uno con sus datos y si sustituye los que no debe dejara de funcionar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Reservar espacio en archivo

Publicado por carlos (95 intervenciones) el 19/12/2023 20:42:18
La cosa es que es un archivo creado como dije entonces se sustituye
Lo he planteado de rellenar aleatoriamente al final y luego moverlo a la posicion y entonces escribir el dato no se si es correcto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reservar espacio en archivo

Publicado por SuperIndio (42 intervenciones) el 22/12/2023 18:59:58
Solo tenes que adecuar el
1
fopen()

1
2
3
4
5
6
7
8
9
10
11
FILE *pFile2;
char buffer[256];
 
pFile2=fopen("myfile2.txt", "a");
if(pFile==NULL) {
    perror("Error open extend.");
}
fprintf(pFile2, "%s", buffer);
 
}
fclose(pFile2);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Reservar espacio en archivo

Publicado por carlos (95 intervenciones) el 22/12/2023 20:20:24
Nop añade al final del archivo, lo que quiero es añadir en la posicion que estoy y solo lo hace al cerrar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reservar espacio en archivo

Publicado por SuperIndio (42 intervenciones) el 26/12/2023 23:51:28
Ahhhh Ya entendi, in this case, si necesitas que el archivo sea plano no veo otra solucion que manejar 2 archivos, para un planteo tan sencillo la solucion va ser compleja y de varias formas en el cual tenes que tener un elemento distintivo entre registros(clave) o Nro de registro o ambos para identificar un "puntero" :

1) Grabar en un temporal.txt los registros hasta llegar el registro punteroinclusive, luego grabar el registro añadido y finamente grabar el resto de los registros restantes, al final renombrar el temporal.txt por el nombre original, esto es en un solo proceso

2) Dividiendo procesos, Hacer la misma mecacanica del punto 1 pero en 2 procesos y comunicados por Shared Memory es decir el proceso que demanda grabar /añadir pasa por memoria compartida al otro proceso la clave o nro de registro y nuevo registro y el otro proceso corriendo como demonio hace el punto 1

3) Agregar un campo indice grabar el registro al final y reordenar segun dicho campo ,ejemplo:
1
2
3
4
5
6
7
8
9
10000;ABDUL ALEJANDRO      16000A1130526598780 000A1130526598000000000020230228
20000;AROLDO SERGIO        16000A1130526598780+000A1130526598000010836020230228
30000;ARNALDO RENE         16000A1130687310434+000A1130687310000008935020230228
40000;BULACIO NEREIDA      16000A1130687310434+000A1130687310000000797020230228
50000;CONSUELO GRACIELA    16000A1130687310434+000A1130687310000002483020230228
60000;PEREZ ARMINDA        16874A9900266409652+004A9900266409000000125020230228
70000;PONZIO FREITA LULA   16874A9900266409652+004A9900266409000000151020230228
80000;SERLOYA CANDELARIO   16874A9900266417538 004A9900266417000000000020230228
90000;ZERAFIN BARTOLA AIDA 16874A9900266417538+004A9900266417000000219020230228
el indice va dejando 10000 posibilidades entr cada registro
si yo quiero agregar
1
2
CONSUELO liliana     16000A1130666456534+000A1176785454534345566020230228
CONSUELO PETRONA     16000A1130666456534+000A1176785454534345566020230228
despues de
1
CONSUELO GRACIELA    16000A1130687310434+000A1130687310000002483020230228
lo grabare asi al final del archivo
1
2
50001;CONSUELO liliana     16000A1130666456534+000A1176785454534345566020230228
50002;CONSUELO PETRONA     16000A1130666456534+000A1176785454534345566020230228
y al cerrar el archivo o proceso de grabacion asi:

A) reordeno todo grabando en un archivo temporal en base al indice dejando asi
1
2
3
4
5
6
7
8
9
10
11
10000;ABDUL ALEJANDRO      16000A1130526598780 000A1130526598000000000020230228
20000;AROLDO SERGIO        16000A1130526598780+000A1130526598000010836020230228
30000;ARNALDO RENE         16000A1130687310434+000A1130687310000008935020230228
40000;BULACIO NEREIDA      16000A1130687310434+000A1130687310000000797020230228
50000;CONSUELO GRACIELA    16000A1130687310434+000A1130687310000002483020230228
50001;CONSUELO liliana     16000A1130666456534+000A1176785454534345566020230228
50002;CONSUELO PETRONA     16000A1130666456534+000A1176785454534345566020230228
60000;PEREZ ARMINDA        16874A9900266409652+004A9900266409000000125020230228
70000;PONZIO FREITA LULA   16874A9900266409652+004A9900266409000000151020230228
80000;SERLOYA CANDELARIO   16874A9900266417538 004A9900266417000000000020230228
90000;ZERAFIN BARTOLA AIDA 16874A9900266417538+004A9900266417000000219020230228

B) Volver a regenerar a traves de otro archivo el indice dejandolo asi para la proxima grabacion:
1
2
3
4
5
6
7
8
9
10
11
10000;ABDUL ALEJANDRO      16000A1130526598780 000A1130526598000000000020230228
20000;AROLDO SERGIO        16000A1130526598780+000A1130526598000010836020230228
30000;ARNALDO RENE         16000A1130687310434+000A1130687310000008935020230228
40000;BULACIO NEREIDA      16000A1130687310434+000A1130687310000000797020230228
50000;CONSUELO GRACIELA    16000A1130687310434+000A1130687310000002483020230228
60000;CONSUELO liliana     16000A1130666456534+000A1176785454534345566020230228
70000;CONSUELO PETRONA     16000A1130666456534+000A1176785454534345566020230228
80000;PEREZ ARMINDA        16874A9900266409652+004A9900266409000000125020230228
90000;PONZIO FREITA LULA   16874A9900266409652+004A9900266409000000151020230228
100000;SERLOYA CANDELARIO   16874A9900266417538 004A9900266417000000000020230228
110000;ZERAFIN BARTOLA AIDA 16874A9900266417538+004A9900266417000000219020230228

Existen otras formas pero eso es muy avanzado llendo a la extraccion y relleno binario, eso no quiero ni tengo ganas de explicar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar