Trotzdem hätte ich das so gemacht (wie p80286 schon sagte):
Delphi-Quellcode:
function ReadIniStream( const Filename, Section, Ident: String; const IniStream: TStream; const FolderOverride: String = '' ): Boolean;
var
FIniFile: TIniFile;
FName: String;
FMemStream: TMemoryStream;
begin
Result:=False;
if IniStream<>nil then
begin
FMemStream := TMemoryStream.Create();
try
FName := GetIniFilename( Filename, FolderOverride );
if not SysUtils.FileExists( FName ) then
Exit;
FIniFile := TIniFile.Create( FName );
FIniFile.ReadBinaryStream( Section, Ident, FMemStream );
FMemStream.Position := 0;
IniStream.Position := 0;
IniStream.CopyFrom(FMemStream, SizeOf(FMemStream));
Result:=True;
finally
FMemStream.Free;
IniStream.Position := 0;
end;
end;
end;
Zumindest ungefähr so (hab ich nicht in Delphi getestet).
Der Grund ist folgender:
Zum einen vertrete ich die Einstellung: Wer etwas erzeugt, der gibt's auch frei.
Zum anderen wird zwar in deiner jetzigen Version der Rssultstream auf jeden Fall erzeugt, aber sollte in beim Lesen aus der Ini was schief gehen, gibt sie trotzdem irgendwas zurück. Die aufrufende Methode erfährt davon nichts, und muss dann mit den fehlerhaften Daten weiterarbeiten.
Mit o.g. Lösung hätte man schon mal die Info, ob das Lesen des Streams fehlerfrei war. Nun muss man zwar in der aufrufenden Methode den Stream erzeugen (wieder eine Zeile mehr), aber damit erhöht sich m.M.n. die Übersichtlichkeit an der Stelle, wo ich den Stream dann auch wieder freigeben muss.
Ist aber nur meine Meinung