Ver Mensaje Individual
  #12  
Antiguo 13-07-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Mas allá de lo que mencionan con respecto a abrir y cerrar archivos con los métodos AssignFile/CloseFile, lo que yo veo es que el método AbrirMe confía en que el archivo está asignado y solo hace un Reset para poner el puntero al principio.
El método CrearMe asigna el archivo y al final lo cierra, por lo que cualquier operación posterior daría un error.

En este caso, si se llama primero a CrearMe y luego a Abrirme, el Reset se tratará de realizar sobre un archivo cerrado.

Código Delphi [-]
Procedure CrearMe (var Me: TipoMe);
var
  RC: TipoRegControl;
  RB: TipoRegBandera;
begin
  assign (Me.B,_RutaArchivo+_ArchivoBanderas);
  assign (Me.D,_RutaArchivo+_ArchivoDatos);
  assign (Me.C,_RutaArchivo+_ArchivoControl);
[...]
  // Luego de crear los archivos, se cierran
  close (Me.B);
  close (Me.D);
  close (Me.C);
  {$I+}
end;

Procedure AbrirMe (var Me: TipoMe);
begin
  // En este punto no podemos asegurar si se el archivo está abierto o no
  // Confiamos en que si
  reset (Me.B);
  reset (Me.D);
  reset (Me.C);
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  X: TipoPosicion;
  Cant: TipoCantidad;
  RD: TipoRegDatos;
begin
  ListBox1.Clear;
  // En este punto no podemos asegurar si se el archivo está abierto o no
  // El método CrearMe lo habría cerrado si fue llamado anteriormente
  // Esto generará un error.
  AbrirMe (Me);
  [...]
  CerrarMe (Me);
end;
Responder Con Cita