Das Problem ist doch noch nicht so gelöst wie ich dachte.
Delphi-Quellcode:
myDate := Date;
DecodeDate(myDate, myYear, myMonth, myDay);
Files := ('log\'+IntToStr(myDay)+'-'+IntToStr(myMonth)+'-'+IntToStr(myYear)+'.txt');
AssignFile(f, Files);
if FileExists(Files) then
begin
Append(f);
WriteLn('ap');
end
else
begin
Rewrite(f);
WriteLn('rw');
end;
So sieht meine Konsole aus:
Delphi-Quellcode:
#######################
## ##
## Masterserver 0.03 ##
## ##
#######################
Server wurde initialisiert.
Server lauscht auf Port: 5000
ap
[2:10:00 AM] Account: fff existiert nicht.
ap
Beim ersten durchlauf klappt alles. ( Was mich wundert ist das er Append(f); 2x aufruft.
Beim zweiten durchlauf gibts wieder die Meldung "Connection Closed Gracefully."
Er scheint aber dennoch mind. bis "AssignFile(f, Files);" zu arbeiten. Wenn ich da eine WriteLn einbaue, wird diese trozdem noch aufgerufen.
Edit:
Die Datei wird ordnungsgemäß über Closefile geschlossen.
Beim zweiten durchlauf bleibt er bei "Append(f);" stehen.
Die Frage die sich stellt: Wieso ruft er "Append(f);" 2x auf. Nirgenswo ist eine schleife einprogrammiert...
Edit:
Ich poste am besten mal den kompletten Part:
Delphi-Quellcode:
procedure TServer.IdTCPServer1Execute(AThread: TIdContext);
var
Data : String;
StrArr : TDynStringArray;
ini : TIniFile;
f : TextFile;
Files : string;
myDate : TDateTime;
myYear, myMonth, myDay : Word;
begin
with AThread.Connection do
begin
myDate := Date;
DecodeDate(myDate, myYear, myMonth, myDay);
Files := ('log\'+IntToStr(myDay)+'-'+IntToStr(myMonth)+'-'+IntToStr(myYear)+'.txt');
AssignFile(f, Files);
if FileExists(Files) then
begin
Append(f);
end
else
begin
Rewrite(f);
end;
Data := String(Socket.ReadLn);
Data := Trim(Data);
if Length(Data) > 0 then
begin
StrArr := Explode('|', Data);
if StrArr[0] = 'login' then
begin
if StrArr[3] = Clientver then
begin
if FileExists('accounts\'+StrArr[1]+'.ini') then
begin
ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini');
try
if StrArr[2] = ini.ReadString('Data','Passwort','') then
begin
Socket.WriteLn('login');
WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.');
WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' hat sich eingeloggt.');
end
else
begin
Socket.WriteLn('invalid');
WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.');
WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' falsches Passwort.');
end;
finally
ini.free;
end;
end
else
begin
Socket.WriteLn('na');
WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.');
WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert nicht.');
end;
end
else
begin
Socket.WriteLn('version');
end;
end;
if StrArr[0] = 'register' then
begin
if FileExists('accounts\'+StrArr[1]+'.ini') then
begin
Socket.WriteLn('vorhanden');
WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.');
WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' existiert bereits.');
end
else
begin
try
ini := TIniFile.Create('accounts\'+StrArr[1]+'.ini');
ini.WriteString('Data','Passwort',StrArr[2]);
ini.WriteString('Data','E-Mail',StrArr[3]);
finally
Socket.WriteLn('erfolg');
ini.free;
WriteLn('['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.');
WriteLn(f, '['+TimeToStr(Time)+']'+' Account: '+StrArr[1]+' wurde registriert.');
end;
end;
end;
end;
end;
CloseFile(f);
end;
Zitat von
Astat:
Zitat von
RedShakal:
Was kann ich noch tun?
Hallo RedShakal, womöglich liegts an der IO Prüfung?
Delphi-Quellcode:
AssignFile(f, 'log\' + DateToStr(Date) + '.txt');
if FileExists('log\' + DateToStr(Date) + '.txt') then
{$I-} Append(f) else Rewrite(f); {$I+}
if IOResult <> 0 then RaiseLastWin32Error;
Was gibt hier IOResult aus?
lg. Astat
Also er zeigt mir in der Tat jetzt einen IO ERROR. Der Fehler tritt sowohl auf Windows als auch auf Linux auf.
"if IOResult <> 0 then RaiseLastWin32Error;" gibt garnichts aus.
Der Debugger sagt folgendes:
---------------------------
Debugger
Exception Notification
---------------------------
Project Project1.exe raised
exception class EInOutError with message 'I/O error 32'.
---------------------------
Break Continue Help
---------------------------