Thema: Delphi Abbruch beim Shreddern

Einzelnen Beitrag anzeigen

Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Abbruch beim Shreddern

  Alt 30. Aug 2009, 14:58
Ich bin dabei, mir eine Prozedur zum Dateischreddern zu schreiben.
Bei kurzen Dateien funktioniert das auch einwandfrei.
Aber bei langen Dateien bricht das Programm direkt nach der Prozedur ab.
Delphi-Quellcode:
type
  TFileData = array[DWord] of Byte;
  TAnyFile = file of byte;

...

procedure shred(fn:string);
var data: TFileData; l: DWord; f: TAnyFile;
    procedure ReadBytes;
    var i: DWord;
    begin
      System.Reset(f);
      i := Low(i);
      while not (eof(f) or (i=High(i))) do begin System.Read(f,Data[i]); Inc(i); end;
      l := i; ShowMessage(IntToStr(l));
      i := Low(i);
      System.Close(f);
    end;
    procedure StoreBytes;
    var i: DWord;
    begin
      System.Reset(f);
      for i := Low(i) to l do System.Write(f,Data[i]);
      System.Close(f);
    end;
    procedure Pass1;
    var i: DWord;
    begin
      for i := Low(i) to l do Data[i] := Data[i] or $B4;
    end;
    procedure Pass2;
    var i: DWord;
    begin
      for i := Low(i) to l do Data[i] := Data[i] and $2D;
    end;
    procedure Pass3;
    var i: DWord;
    begin
      for i := Low(i) to l do Data[i] := Data[i] xor $67;
    end;
    procedure Pass4;
    var i: DWord;
    begin
      for i := Low(i) to l do Data[i] := Data[i] or $ED;
    end;
begin
  ShowMessage('0');
  ChDir(DirToWin(dir));
  ShowMessage('1');
  System.Assign(f,fn);
  ShowMessage('2');
  ReadBytes;
  ShowMessage('3');
  { Pass1;StoreBytes;
  ShowMessage('4');
  Pass2;StoreBytes;
  ShowMessage('5');
  Pass3;StoreBytes;
  ShowMessage('6');
  Pass4;StoreBytes;
  ShowMessage('7'); }

end;
Durch auskommentieren (siehe oben) habe ich herausgefunden, dass allein schon das Lesen (ReadBytes) für den Abbruch verantwortlich ist.
Auch den Aufruf habe ich durch ShowMessage-Aufrufe gepolstert, daher weiß ich, dass direkt nach Aufruf der Prozedur abgebrochen wird:
Delphi-Quellcode:
ShowMessage('-1');
shred(p[1]);
 // Hier wird abgebrochen
ShowMessage('8');
Warum bricht das Programm bei langen Dateien ab und bei kurzen nicht?
Marvin
  Mit Zitat antworten Zitat