Ist schon 2 Monate her, aber ich hatte keine Zeit, mich mit Delphi zu beschäftigen, aber nun bin ich wieder da.
Ich bin euren Ratschlägen gefolgt und habe den Puffer vergrößert und alles mühevoll angepasst.
Delphi-Quellcode:
procedure Crypt(XFile, KFile, NewFile: String);
var
fkey, fxfile: TFilestream; : TFilestream;
keys: array[0..524287] of Byte; // deine Menge weniger 1
i, calc: Cardinal;
buffer: Byte;
realbuffer: LongInt;
begin
fkey := TFileStream.Create(KFile, fmOpenRead);
fkey.Read(keys, 524288); // nun wieder vollzählig
fkey.Free; // wird nicht mehr benötigt, da im Speicher
CopyFile(PChar(OriginalFile), PChar(NewFile), FALSE);
fxfile := TFileStream.Create(NewFile, fmOpenReadWrite);
SaveProgress.MaxValue := fxfile.Size;
SaveProgress.Progress := SaveProgress.MinValue;
calc := fxfile.Size div 2048;
for i := 0 to calc do
begin
realbuffer := fxfile.Read(buffer, 2048);
fxfile.Position := fxfile.Position - realbuffer;
buffer := buffer XOR keys[(i mod 524287)]; // XOR
fxfile.Write(buffer, realbuffer);
SaveProgress.Progress := SaveProgress.Progress + realbuffer;
SaveProgress.Refresh; //Progressbar aktualisieren
Application.processmessages; //Fenster noch verwendbar
end;
fxfile.Free;
ShowMessage(Name1.Text + ' was mixed with ' + Name2.text);
end;
Nun ist eigentlich alles genauso, wie ich es will. Nur ein paar Sachen klappen nicht.
- Ich kann die Puffergröße nicht höher als 2KB einstellen(also schon bei 4KB gibt die Prozedur den Geist auf)
- Am Ende der Prozedur, also nach der MsgBox gibt's eine AV.
Zur Puffergröße: Wovon hängt die erlaubte Puffergröße ab? Ich hab es mit >2KB versucht, doch dann passiert, dass die Progressbar nichts anzeigt, dann sofort die Meldung angezeigt wird, keine
AV, aber beim 2.ten Aufrufen der Prozedur gibt's eine
AV:
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt test.exe ist eine
Exception der Klasse EFOpenError aufgetreten. Meldung: 'Datei C:\test.jpg kann nicht geöffnet werden. Das System kann die angegebene Datei nicht finden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Aber die Datei ist auf jeden Fall vorhanden.
Die
AV zum 2ten Problem:
Zitat:
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt C:\test.exe trat ein Problem mit folgender Meldung auf: 'Zugriffsverletzung bei 0xd1b51878: Lesen von Adresse 0xd1b51878'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK
---------------------------