C/Visual C - Actualizar Registro de Archivo secuencial ???

 
Vista:

Actualizar Registro de Archivo secuencial ???

Publicado por leonel ramirez (4 intervenciones) el 02/01/2003 22:21:56
Que tal:

Requiero saber si existe alguna forma en C de hacer una lectura y posterior actualizacion del mismo registro leido. Por ahi vi algo de usar dos archivos... pero eso no me sirve. ya que el archivo es compartido por varios usuarios.

gracias antemano
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por Endos (58 intervenciones) el 02/01/2003 23:11:56
Claro que existe, pero depende del sistema operativo y la versión de compilador que utilices.
En Turbo C++ (por poner un ejemplo de un compilador veterano para una plataforma monotarea como es DOS) ya es posible hacerlo, usando las funciones estilo UNIX que incluye: abrir el archivo con open() con el modificador de acceso como O_DENYNONE para permitir lectura/escritura compartida (exiten también accesos de solo lectura y solo escritura compartidas), lock() para bloquear una porción del archivo al resto de usuarios mientras actualizamos con un write(), unlock() para desbloquear lo anterior y funciones como seek() para colocarnos en la posición que queramos dentro del archivo.

Saludos.
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por leonel ramirez (4 intervenciones) el 02/01/2003 23:49:54
Gracias:

Pero, te cuento que estoy usando Ansi C version 6.00a, en OS/2 2.11, te parecera algo extraño ya que ambos son muy antiguos, pero asi estan las cosas. Revise las funciones y solo encontre open, write, close, no tengo la funcion seek, por lo mismo tuve que realizar una busqueda secuencial, (usando fgets) hasta que llege al registro, pero no se como actualizar dicho registro.

Si sabes como prodria hacerlo, te lo agradecere mucho.

Leonel

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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por El Mogur (202 intervenciones) el 03/01/2003 01:36:56
:-mmm
Las funciones fopen, fclose, fseek, fread, etc., en teoría son ANSI C...

Un saludo!
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por Leonel Ramirez (4 intervenciones) el 03/01/2003 15:29:47
Estimado:
Es cierto que existen las funciones fseek, fopen, fclose,fread. Pero por ejemplo, para hacer fseek solo funciona indicando como parametro la ubicacion del registro en el archivo.

//Trozo de ejemplo

printf( "Ingrese Numero de Record Entre 1 y 10 (ó 0 para salir): " );
scanf( "%d", &newrec );

/* Busca y Despielga registros validos. */
if( (newrec >= 1) && (newrec <= 10) )
{
recseek = (long)((newrec - 1) * recsize);
fseek( recstream, recseek, SEEK_SET );

fread( &filerec, recsize, 1, recstream );

printf( "Entero Encontrado :\t%d\n", filerec.integer );
printf( "Doble Encontrado :\t%ld\n", filerec.doubleword );
//Fin Trozo Ejemplo

Ademas al hacer fput sobre el registro este no es actualizado sobre el archivo.

Un abrazo.

Leonel
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por Endos (58 intervenciones) el 03/01/2003 20:00:10
Si no sabes que registro y en que posición se encuentra dificilmente puedes actualizar nada, así que el fseek funciona de la única forma lógica posible.

Para volcar el contenido del buffer de archivo después de cualquier escritura puedes llamar a fflush(). Si el sistema este no te convence, puedes deshabilitar el buffer con la función setvbuf().

Saludos
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por Leonel Ramirez (4 intervenciones) el 03/01/2003 21:03:25
Estimado Endos

Aparentemente no me explique bien, lo que pasa es que estoy tratantando de buscar un registro cuya llave es un string por lo que busqueda con fseek no fue posible, ya que no se en que posicion del archivo esta dicho registro. Pero ahora estoy usando una busqueda secuencial y luego actualizo registro usando las funciones fgetpos y fsetpos, para controlar puntero y lograr hacer fput del registro modificado. esto funciono ok. No se si es el metodo mas eficiente, pero almenos es eficaz.

Muchas gracias por tu aporte.
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

RE:Actualizar Registro de Archivo secuencial ???

Publicado por Endos (58 intervenciones) el 03/01/2003 21:40:19
Efectivamente, no entendí bien... Si la llave siempre se encuentra en la misma posición del archivo y esta no varía, podrías guardar su posición para acceder en otras ocasiones de forma más rápida. En cualquier otro caso, no hay otra forma de hacerlo que como lo haces actualmente.

Saludos.
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