Hai Sko,
hier einmal ein ungetestetes Beispiel. Das sollte man wenn möglich natürlich in einen Thread auslagern
Delphi-Quellcode:
procedure TFRM_Main.btn_TestClick(Sender: TObject);
var
DefCipherClass: TCipherClass;
quelle: TFileStream;
ziel: TMemoryStream;
buffer: Pointer;
Blockgroesse: integer;
Laenge: integer;
quelldatei: string;
zieldatei: string;
begin
quelldatei := 'c:\blubb.txt';
zieldatei := 'c:\blubb.enc';
Blockgroesse := 1024;
DefCipherClass := TCipher_Blowfish;
quelle := TFileStream.Create(quelldatei, fmOpenRead or fmShareDenyNone);
try
ziel := TMemoryStream.Create;
try
with DefCipherClass.Create('', nil) do
begin
Mode := cmCBC;
InitKey('blubb', nil);
GetMem(Buffer, Blockgroesse);
try
while (quelle.Position < quelle.Size) do
begin
if (quelle.Size - quelle.Position > Blockgroesse) then
begin
Laenge := Blockgroesse
end
else
begin
Laenge := quelle.Size - quelle.Position
end;
quelle.ReadBuffer(Buffer^, Laenge);
EncodeBuffer(Buffer^, Buffer^, Laenge);
ziel.WriteBuffer(Buffer^, Laenge);
// Hier könntest Du die Progessbar positionieren.
end;
finally
FreeMem(Buffer);
end;
ziel.Position := 0;
ziel.SaveToFile(zieldatei);
end;
finally
ziel.Free;
end;
finally
quelle.Free;
end;
end;
Wenn ich es noch richtig im Kopf habe wurde von
Hagen bzw.
Luckie einmal eine von TStream abgeleitete Klasse
TStreamProgressAdapter erstellt welche ein Ereigniss
OnProgress besitzt um damit zum Beispiel eine Progressbar steuern zu können.
Stephan B.
"Lasst den Gänsen ihre Füßchen"