Einfacher, TProgressAdapter gibt den Stream den er kapselt selber frei. D.h. FileStream.Free ist in jedem Falle falsch.
Delphi-Quellcode:
ProgressAdapter := TStreamProgressAdapter.Create(TFileStream.Create(FileName, Mode));
try
ProgressAdapter.Read();
ProgressAdapter.Write();
finally
ProgressAdapter.Free;
end;
D.h. der Stream den man einem TStreamProgressAdapter übergibt ist irrelevant und muß nicht mehr als variable gespeichert werden. Alle Stream-Funktionen laufen nur über den ProgressAdapter, er kapselt sozusagen vollständig ein anderes Stream Object. Der Vorteil: statt ihn nur für Progressbars zu nutzen kann er auch beim Lesen/Schreiben Prüfsummen berechnen, zusätzlich komprimieren und vwerschlüsseln. Dazu müssen nur die .Write() .Read() Methoden angepasst werden.
Gruß Hagen