Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error I/O 32 (https://www.clubdelphi.com/foros/showthread.php?t=64346)

velezbunzl 27-03-2009 18:11:41

Error I/O 32
 
buenas atrdes, mi problema es este mi programa escribe un archivo de texto que luego utilizo para crear una matriz y poder ahcer unas operacioens con la matriz, lo que sucede es que luego de cerrar el programa y abrirlo pro segudna vez cada qeu trato de ingresar un buevo dato me aparece este error, trate de cerrar e larchivo cuando creo la matriz pero ya el problema es que no puedo realizar las oepraciones, y si pongo el procedfimiento para crear la amtriz en el form active cada vez que le doy calcular las operaciones me aumetna el numero de datos al doble de lso que tengo

duilioisola 27-03-2009 18:20:33

Seguramente te haz dejado abierto el archivo
ó lo tienes abierto con otra aplicación
ó lo abres dos veces
ó lo cierras antes de abrirlo
ó nunca lo abres
ó estas tratando de escribir en un archivo solo lectura
ó ...

Escribe alguna línea de cómo lo abres y cierras el archivo para que podamos ver dónde está el error.

También puedes tomarte unos minutos para corregir faltas de ortografía, poner mayúsculas y minúsculas dónde corresponda, poner un punto cada tanto para separar frases, etc.

Hay un miembro en el club que pone en su firma:
Cita:

El tiempo invertido en la respuesta es directamente proporcional al tiempo invertido en la pregunta.
Espero no te ofendan mis comentarios...

velezbunzl 27-03-2009 18:26:15

aqui esta la undiad tipos

Código:

unit Tipos;


interface

uses
  Controls;

type


  TPeriodoMedicion = (Manhana, Tarde, Noche);
  TTipoMedicion = (Diastolica, Sistolica);

  TMedicionPresion = record
    ValorMedicion: Integer;
    PeriodoMedicion : TPeriodoMedicion;
    TipoMedicion : TTipoMedicion;
    Fecha  : TDate;
  end;

implementation

end.

aqui esta la unidad de los datos que es doden lso ingreso

Código:

unit U_Datos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Tipos, ComCtrls;

type


  TFrm_Datos = class(TForm)
    Rdg_presionesart: TRadioGroup;
    Label1: TLabel;
    Label2: TLabel;
    Tcom_estadodeldia: TComboBox;
    Edt_ValorPresion: TEdit;
    Btn_Guardar: TButton;
    DateTimePicker1: TDateTimePicker;
    Label3: TLabel;
    procedure Rdg_presionesartClick(Sender: TObject);
    procedure Btn_GuardarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_Datos: TFrm_Datos;

implementation

{$R *.dfm}

procedure TFrm_Datos.Rdg_presionesartClick(Sender: TObject);
begin
  if Frm_Datos.Rdg_presionesart.ItemIndex = 0 then
    begin
      Frm_Datos.Label1.Caption :=  'Sistolica:';
    end
  else
    begin
      Frm_Datos.Label1.Caption :=  'Diastolica:';
    end

end;

procedure TFrm_Datos.Btn_GuardarClick(Sender: TObject);
var
  LaMedicionPresion :  TMedicionPresion;
  F : TextFile;
  SArchivo: String;
begin

  LaMedicionPresion.ValorMedicion := StrToInt(Edt_ValorPresion.text);

  LaMedicionPresion.Fecha := self.DateTimePicker1.Date;

  if frm_Datos.Rdg_presionesart.ItemIndex = 0 then
      begin
        LaMedicionPresion.TipoMedicion := Sistolica;
      end
  else
      begin
      LaMedicionPresion.TipoMedicion := Diastolica;
      end;

    if frm_Datos.Tcom_estadodeldia.ItemIndex = 0 then
        LaMedicionPresion.PeriodoMedicion := Manhana
    else if frm_Datos.Tcom_estadodeldia.ItemIndex = 1 then
        LaMedicionPresion.PeriodoMedicion := Tarde
    else if frm_Datos.Tcom_estadodeldia.ItemIndex = 2 then
        LaMedicionPresion.PeriodoMedicion := Noche;

  sArchivo := ExtractFilePath( Application.ExeName ) + 'Registros.txt';
  AssignFile(F, 'Registros.txt');

  if FileExists( sArchivo ) then
      Append( F )
    else
      begin
        Rewrite( F );
  // Escribir una linea
        Writeln(F, 'Registro Dato Presion');
      end;
  Writeln(F, '');
  Writeln(F, IntToStr(LaMedicionPresion.ValorMedicion) );

  if LaMedicionPresion.PeriodoMedicion = Manhana  then
      Writeln(F, 'Mananha' )
  else if LaMedicionPresion.PeriodoMedicion = Tarde  then
      Writeln(F, 'Tarde' )
  else if LaMedicionPresion.PeriodoMedicion = Noche  then
      Writeln(F, 'Noche' );

  if LaMedicionPresion.TipoMedicion = Diastolica  then
      Writeln(F, 'Diastolica' )
  else if LaMedicionPresion.tipoMedicion = Sistolica  then
      Writeln(F, 'Sistolica' );

  Writeln(F, DateToStr(LaMedicionPresion.Fecha ) );


  CloseFile(F);

  self.Edt_ValorPresion.Clear;

end;

end.

y aqui esta dodne lso cargo apra utilizarlos en las oepraciones+ç

Código:

unit U_Acerca_De;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, tIPOS;

type
  TFrm_Acerca_de = class(TForm)
    Label1: TLabel;
    Image2: TImage;
    StaticText1: TStaticText;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_Acerca_de: TFrm_Acerca_de;
    Numero_datos_A_Analizar: integer;
  DatosMedicion : array of  TMedicionPresion;

implementation

{$R *.dfm}

procedure TFrm_Acerca_de.FormCreate(Sender: TObject);
var
F : TextFile;
  linealeida: String;

begin
    assignfile(F, 'registros.txt');
    Reset(F);
    Readln(F, LineaLeida);
    while not Eof(F) do
    begin
      // Leer las variables X y Y del punto desde el archivo
      Readln(F, LineaLeida);
      LineaLeida := Trim(LineaLeida);
      //  Necesito que no me tenga en cuenta los espacios
      if Length(LineaLeida) > 0 then
          begin

            Numero_datos_a_Analizar := Numero_datos_a_Analizar + 1;
            //  Ingresar a la matriz de puntos
            SetLength(DatosMedicion, Numero_datos_a_Analizar);
            Datosmedicion[Numero_datos_a_Analizar - 1].ValorMedicion := StrToInt(LineaLeida);
            Readln(F, LineaLeida);
            LineaLeida := Trim(LineaLeida);
            if LineaLeida = 'Mananha' then
                Datosmedicion[Numero_datos_a_Analizar - 1].PeriodoMedicion := Manhana
            else if LineaLeida = 'Tarde' then
                Datosmedicion[Numero_datos_a_Analizar - 1].PeriodoMedicion := Tarde
            else if LineaLeida = 'Noche' then
                Datosmedicion[Numero_datos_a_Analizar - 1].PeriodoMedicion := Noche;

            Readln(F, LineaLeida);
            LineaLeida := Trim(LineaLeida);
            if LineaLeida = 'Sistolica' then
            Datosmedicion[Numero_datos_a_Analizar - 1].TipoMedicion := Sistolica
            else if LineaLeida = 'Diastolica' then
                Datosmedicion[Numero_datos_a_Analizar - 1].TipoMedicion := Diastolica;

            Readln(F, LineaLeida);
            LineaLeida := Trim(LineaLeida);
            Datosmedicion[Numero_datos_a_Analizar - 1].Fecha := StrToDate(linealeida);
//  TTipoMedicion = (Diastolica, Sistolica);

          end;
    end;
end;



end.

el problema es que si cierro el archivo en esta unidad al final se soluciona el problema de entrada y saldia de datos pero si agrego mas datos y quiero hacer las operaciones no tiene en cuetna los datos nuevos

cyberpablis 19-10-2010 17:04:34

Jeje
 
Estas tratando de leer un archivo que esta abierto por otro proceso.

Czar Itoh 17-01-2012 03:11:50

Continuando con el Error I/O 32
 
Hola, tengo dos aplicaciones corriendo al mismo tiempo. Una de ellas se encarga de generar un archivo Txt que sirve de insumo para la segunda aplicación. El problema es que la segunda en ocasiones me marca el Error I/O 32. Supongo que ambas aplicaciones en un momento dado tienen 'ocupado' el mismo archivo y es por eso que me marca este error.

La pregunta es: ¿cómo puedo saber o que función existe en dlphi, que me permita saber si un archivo que quiero abrir está 'libre', que nadie más lo está utilizando?

De antemano, muchas gracias y ojalá me puedan dar un tip para corregir ésto.

Casimiro Notevi 17-01-2012 09:24:53

Por favor, Czar Itoh, crea un hilo nuevo con un título apropiado, gracias.
Esto es un tema distinto, aunque el problema sea similar.


La franja horaria es GMT +2. Ahora son las 07:41:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi