Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#7

AW: stringlist zu filestream , filestream zu datei

  Alt 3. Jan 2018, 12:15
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.
  Mit Zitat antworten Zitat