Hi
@Sharky: das sollte keineswegs abwertend wirken...
tipp von mir:
1. die Inidatei noch simpel verschlüsseln (zB XOR)
2. Die Inidatei komplett hinter die Main-Exe oder eine andere datei deines Programms schreiben (Code dazu weiter unten)
3. Die Checksumme der Main-Exe (incl. Ini-datei) gesondert speichern und bei programmstart überprüfen...
Damit hängt man eine Datei hinter eine andere (besser gesagt einen MemoryStream hinter eine datei)
Delphi-Quellcode:
function AttachToFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;
try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
// seek to end of File
// ans Ende der Datei Seeken
aStream.Seek(0, soFromEnd);
// copy data from MemoryStream
// Daten vom MemoryStream kopieren
aStream.CopyFrom(MemoryStream, 0);
// save Stream-Size
// die Streamgröße speichern
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
finally
aStream.Free;
end;
Result := True;
end;
Und damit bekommt man seinen Stream aus der Datei zurück:
Delphi-Quellcode:
function TForm1.LoadFromFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;
try
aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
// seek to position where Stream-Size is saved
// zur Position seeken wo Streamgröße gespeichert
aStream.Seek( - SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if iSize > aStream.Size then
begin
aStream.Free;
Exit;
end;
// seek to position where data is saved
// zur Position seeken an der die Daten abgelegt sind
aStream.Seek( - iSize, soFromEnd);
MemoryStream.SetSize(iSize - SizeOf(Integer));
MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
MemoryStream.Seek(0, soFromBeginning);
finally
aStream.Free;
end;
Result := True;
end;
MfG
Boombuler