![]() |
WriteFile schreibt Nonsense in Datei
Hi :) ,
Ich wollte eine Logdatei erstellen und dort Aktionen aufzeichnen, die so im Programmverlauf passieren. Ich wollte dies explizit mit der Windows-API erreichen. Ich weiss, dass es auch AssignFile(), ReWrite() und Writeln() dafür gibt. Aber etwas mit der Winows-API umgehen zu können schadet ja nicht, oder? So habe ich es probiert:
Delphi-Quellcode:
Wenn ich nun das programm starte und ein paar mal auf den Button klicke steht am Ende soetwas in der Datei:
procedure LogEvent(lpEventStr: PAnsiChar);
var logFilePath : Pchar; hFile : Thandle; ofStruct : _OFSTRUCT; BytesWritten : DWORD; begin logFilePath := Pchar(ExtractFilePath(ParamStr(0))+'eventlog.txt'); hFile := OpenFile(logFilePath,ofStruct, OF_READWRITE OR OF_CREATE); If hFile <> INVALID_HANDLE_VALUE Then begin SetFilePointer(hFile,0,nil,FILE_END); WriteFile(hFile,lpEventStr,Length(lpEventStr),BytesWritten,nil); end; CloseHandle(hFile); end; procedure TForm1.FormCreate(Sender: TObject); begin LogEvent('Start'); end; procedure TForm1.Button1Click(Sender: TObject); begin LogEvent('Button klicked'); end; "DD" Die Fragezeichen sind diese Kästchen. Der Hexeditor sieht folgende Bytes in der Datei: FC DB 44 00 6C F7 12 00 FA DB 44 00 6E E5 Weiss jemand wo der Fehler liegt und kann ihn mir bitte zeigen? Ich bin etwas verwirrt, und weiss nich wo ich suchen soll. :( :cry: |
Re: WriteFile schreibt Nonsense in Datei
Moin Lenny,
das ^ fehlt.
Code:
Du willst ja den Wert schreiben, auf den der Pointer zeigt, und nicht den Pointer und alles was dahintersteht.
WriteFile(hFile,lpEventStr[color=red][b]^[/b][/color],Length(lpEventStr),BytesWritten,nil);
|
Re: WriteFile schreibt Nonsense in Datei
Ahhhh, so ein kleines Zeichen erwirkt so einen undurchsichtigen Fehler.
Vielen Dank erstmal. :) Komme jedoch leider gleich zum nächsten Problem. Auf diese Weise steht immer nur das letzte aufgezeichnete Event in der Logdatei. Dabei setze ich den File_Pointer doch immer extra ans Ende? :gruebel: |
Re: WriteFile schreibt Nonsense in Datei
Ich habs. OF_CREATE muss weg. :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz