SoloCodigo

Programación General => Pascal => Mensaje iniciado por: _EL_DJ_LU en Viernes 14 de Octubre de 2005, 07:19

Título: Assign, Reset, Rewrite Y Close
Publicado por: _EL_DJ_LU en Viernes 14 de Octubre de 2005, 07:19
Hola a todos..
Soy estudiante de Ing. Informatica.. y bueno en uno de los cursos basicos.. estamos usando el pascal.
 Bueno una de mis dudas es la siguiente.. espero me ayuden.. gracias.

Para manejo de archivos hacemos generalmente esto

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
.
.
.
.
.
Close(Arch);

Mi pregunta es que pasa si hago esto?

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
.
.
Close(Arch);
Reset(Arch);
close(Arch);
Reset(Arch);
close(Arch);

A lo que me refiero es que me dijeron que despues de hacerle "close" no es correcto hacerle un "reset"..  me dijeron que tengo que hacerle nuevamente un "assign" que de cierto hay en esto.. me dicen que la direccion del archivo en memoria se pierde con el Close..

Me podrian dar una explicacion sobre esto?.. gracias..
Título: Re: Assign, Reset, Rewrite Y Close
Publicado por: Enko en Sábado 15 de Octubre de 2005, 00:52
Siemrpe usé el Assign una sola vez y no tuve problemas.  :scream:
Título: Re: Assign, Reset, Rewrite Y Close
Publicado por: Alpha_ en Sábado 15 de Octubre de 2005, 06:56
Idem yo..

Pero de todos modos, lo lógicamente correcto es abrir un archivo, usar lo que necesites, y cerrarlo y no volver a usarlo.

Salvo que sea de entrada y salida, pero podés pensarlo como si fueran dos archivos distintos. En un caso es uno de lectura (para obtener datos), y otro de escritura (para guardar los datos).

Hoy en día, abro archivos, hago lo que tengo que hacer, lo cierro.. y no lo vuelvo a abrir.
Título: Re: Assign, Reset, Rewrite Y Close
Publicado por: Amilius en Sábado 15 de Octubre de 2005, 14:51
Cita de: "_EL_DJ_LU"
Hola a todos..
Soy estudiante de Ing. Informatica.. y bueno en uno de los cursos basicos.. estamos usando el pascal.
 Bueno una de mis dudas es la siguiente.. espero me ayuden.. gracias.

Para manejo de archivos hacemos generalmente esto

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
.
.
.
.
.
Close(Arch);

Mi pregunta es que pasa si hago esto?

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
.
.
Close(Arch);
Reset(Arch);
close(Arch);
Reset(Arch);
close(Arch);

A lo que me refiero es que me dijeron que despues de hacerle "close" no es correcto hacerle un "reset"..  me dijeron que tengo que hacerle nuevamente un "assign" que de cierto hay en esto.. me dicen que la direccion del archivo en memoria se pierde con el Close..

Me podrian dar una explicacion sobre esto?.. gracias..
Pues te dieron una explicación muy mala. Eso de ´despues de hacerle "close" no es correcto hacerle un "reset"´ eso parece consejo de cocina o algo parecido.  :D

En informática uno debe saber exactamente que sucede, en este caso al hacer assign, reset y close.

En delphi y t.pascal v7 es totalmente correcto hacer esto (comprobado con memproof y con la documentación del compilador):

Para delphi:

AssignFile(Arch,'nombrearchivo.bin');
Reset(Arch);
CloseFile(Arch);
Reset(Arch);
CloseFile(Arch);

Para t.pascal v7

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
Close(Arch);
Reset(Arch);
Close(Arch);

Esta claramente indicado que assign no se mete con los "file handle", eso corresponde al par Reset y Close. De hecho en el siguiente código el segundo assign está sobrando, ocupando espacio en RAM y tiempo de cpu inutilmente:  ;)

Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
Close(Arch);
Assign(Arch,'nombrearchivo.bin');
Reset(Arch);
Close(Arch);

Citar
.. me dicen que la direccion del archivo en memoria se pierde con el Close..

El "file handle" queda liberado, y vuelves a pedir uno con el "reset"  ;)

Textual de la documentación de TP7:

Citar

 After a call to Assign, the association
 between F and the external file continues to
 exist until another Assign is done on F.

Asi que lo que no pierdes es la asociación con el archivo externo, el file handle queda liberado pero de todos modos al hacer otra vez el reset reservarás uno nuevo.

Citar

If F is already open, it is first closed and then reopened.

Y de hecho si el archivo no estaba cerrado y lo abres NUEVAMENTE el compilador te hace el favor de cerrar primero el archivo y luego abrirlo.

Esperemos que el que te dijo "no es correcto" tenga por lo menos la intención de aprender algo.  :rolleyes:
Título: Re: Assign, Reset, Rewrite Y Close
Publicado por: Enko en Sábado 15 de Octubre de 2005, 14:55
Muy Buena info B)