ich schreibe das jetzt alles so
Delphi-Quellcode:
aText := Datetimetostr(now) + ' ' + aText + linefeed;
aByteArr := TEncoding.Utf8.GetBytes(aText);
//FStream.Write(aText[1], length(aText) * Sizeof(aText[1]) );
FStream.WriteData(aByteArr, Length(aByteArr));
Datei wird wie folgt erzeugt, damit es passt
Delphi-Quellcode:
if not TFile.Exists(fLogFile) then
Begin
FileOpenMode := fmCreate;
fStream := TFileStream.create( self.fLogFile, FileOpenMode );
Preambel := Tencoding.UTF8.GetPreamble;
fStream.WriteData(Preambel,length(Preambel));
fStream.free;
End;
Ich öffne mehrere (wenige und kleine)Logfiles und hänge sie hintereinander in einen String.
aText := aText + TFile.ReadAllText(flogfile,Tencoding.UTF8);
Dann erzeuge ich aus dem String eine einzige Datei für ein Email Attchment.
Delphi-Quellcode:
function TLog.Internal_GetEmailFile: String;
var alogtext:String;
begin
result := '';
Internal_ReadFile(alogtext);
alogtext := aLogtext.Replace(''+linefeed, ''+carriageReturn+''+linefeed, [rfReplaceAll] );//für Notepad.exe
alogtext := alogtext.Replace(''#0,'',[rfReplaceAll]);//einfach zur sicherheit.
if tFile.Exists(fEmailFile) then
Tfile.Delete(fEmailFile);
TFile.WriteAllText(femailfile,aLogText, TEncoding.UTF8 );//erzeugt eine UTF8 Preambel (BOM)
result := femailfile;
end;
Diese Datei kann ich dann tatsächlich per notepad.exe öffnen.
Problem ist also gelöst..
und viel über kodierung und strings dabei gelernt.