Es würde also ein Nachfahre von TMemIniFile ausreichen, der eine zusätzliche Methode für's Speichern bekommt. Ungefähr sowas:
Delphi-Quellcode:
Type
TMyMemIniFile = class(TMemIniFile)
FFileStream : TFileStream;
private
procedure LoadValues; override;
public
constructor Create(st : TFileStream); override;
procedure UpdateSream;
end;
constructor TCustomIniFile.Create(st : TFileStream);
begin
FFileStream := st;
end;
procedure TMyMemIniFile.UpdateStream;
var
List: TStringList;
begin
List := TStringList.Create;
try
GetStrings(List);
List.SaveToStream(FFileStream, FEncoding);
finally
List.Free;
end;
Modified := False;
end;
procedure TMyMemIniFile.LoadValues;
var
List: TStringList;
begin
if Assigned(fFileStream) then
begin
List := TStringList.Create;
try
List.LoadFromStream(fFileStream);
SetStrings(List);
finally
List.Free;
end;
end
else
Clear;
end;
Ungetest hingedaddelt. Und ggfls. muss man mal schauen, was sonst noch so angepasst werden muss.
Eine ggfls. erwünschte Verschlüsselung bzw. Entschlüsselung ließe sich aber sicherlich dann direkt im LoadValue bzw. im UpdateStream mit einbauen.
Man könnte aber auch bei der bisherigen, dateibasierten, Variante bleiben und nur die Routinen überschreiben, die für das Laden bzw. Speichern der Datei verantwortlich sind. Damit wäre das Ganze für bestehende Implementierungen (weitgehend) transparent. Man muss halt dann nur dort, wie bisher sowas wie
ini : TMemIniFile; ini := TMemInifile.Create('dateiname');
steht, aus TMemIniFile TMyMemIniFile machen. Der Rest der bisherigen Implementierungen dürfte von der Änderung unbelastet bleiben.