PDA

Ver la Versión Completa : Archivo de texto


KroSaver
20-02-2013, 13:01:59
Hola muy buenas a todos mire me estoy iniciando en Delphi y tengo unos problemas con una aplicacion que estoy haciendo y es con los archivos de texto.

Me salta un error muy raro que no entiendo que es en en la linea Append(Logs); de este code:


uses
Windows,SysUtils;


var
Logs: TextFile;
DirLogs: String;
Caracter: Integer;
Ventana: HWND;
VentanaA: array [0..MAX_PATH] of Char;
VentanaB: array [0..MAX_PATH] of Char;

begin

DirLogs := 'C:\kr.txt';

if FileExists(DirLogs) then
else
begin
AssignFile( Logs, DirLogs );
Rewrite( Logs );
WriteLn(Logs,'>-----< PROVANDO >-----<');
CloseFile(Logs);
end;

while(true)do
begin
sleep(20);
Ventana:=GetForegroundWindow();
GetWindowText(Ventana,VentanaA,MAX_PATH);

if(VentanaA<>VentanaB)then
begin

Append(Logs);
Writeln(Logs,'PROVANDO');
CloseFile(Logs);
VentanaA := VentanaB;

end;

end;
end.


El error que da es este:

Project Project1.exe raised exception class EInOutError with message "I/O error 102". Process stopped. Use Step or Run to continue.

Y otro error esta en la linea VentanaA := VentanaB; me dice que son tipos incompatibles :eek: algo que en IDE Lazarus no me dava este error y me funcionaba bien.

Para este code uso Delphi 7 Enterprise.

gracias de antemano y saludos.

ecfisa
20-02-2013, 13:40:32
Hola KroSaver, bienvenido a Club Delphi. :)

El error 102 (File not assigned) se presenta en tu código por que el archivo solo es asignado en la creación debido al condicional if :

...
if FileExists(DirLogs) then
// Si existe ... ??
else
begin
// Aquí (cuando no existe) no tendría que generar error
AssignFile( Logs, DirLogs );
Rewrite( Logs );
WriteLn(Logs,'>-----< PROBANDO >-----<');
CloseFile(Logs);
end;
...
if(VentanaA<>VentanaB)then
begin
Append(Logs); // ¡¡¡ Error !!! El archivo no está asignado
...


Del modo siguiente, el archivo es asignado tanto para Rewrite como para Append o Reset y no dará error.

...
AssignFile(Logs, DirLogs);
if not FileExists(DirLogs) then
begin
Rewrite(Logs);
WriteLn(Logs,'>-----< PROBANDO >-----<');
CloseFile(Logs);
end;
...


En cuanto a la asignación de arreglos en Delphi, proba de este modo:

Move(VentanaA, VentanaB, SizeOf(VentanaB));


Saludos.

KroSaver
20-02-2013, 13:50:42
Uff que bueno muchisimas gracias ecfisa todo solucionado ahora funciona de 10!

saludos

ecfisa
20-02-2013, 14:07:26
Uff que bueno muchisimas gracias ecfisa todo solucionado ahora funciona de 10!

saludos
No tenes nada que agradecer. :o

Esto es una de las tantas buenas cosas de Club Delphi: Es un ida y vuelta de información. (Hasta leer tu mensaje no sabía que en Lazarus se podían asignar arreglos de ese modo)

Saludos. :)