Delphi - Állomány megsemmisítése

forráskód letöltése
Ha törlünk egy állományt, akkor az fizikailag még a merevlemezen marad, és amíg nem történik arra a területre írás, addig maradéktalanul helyreállítható lesz. Ha úgy szeretnénk egy állományt eltüntetni, hogy annak tartalmát semmilyen módon ne lehessen visszanyerni, akkor az állomány törléséhez használjuk a mellékelt példában létrehozott komponenst.
A mellékelt példaprogram megnyitása előtt az EliminateFile.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Az állomány végleges megsemmisítését úgy tudjuk megoldani, hogy törlés előtt felülírjuk annak teljes tartalmát véletlenszerű bájtokkal, majd ez követően töröljük csak. Így egy esetleges visszaállítás esetén sem lehet már hozzáférni az állomány eredeti tartalmához.
A létrehozott komponens FileName property-jében kell megadni a törlendő állomány nevét elérési útvonallal együtt, majd az Execute eljárás hívásával elvégezhetjük a felülírást és a törlést.
Első lépésként ellenőrizzük, hogy létezik-e egyáltalán a megadott állomány.
procedure TEliminateFile.Execute;
...
  if FileExists(FFileName) then begin
    Randomize;
Ha létezik, akkor egy TFileStream-el megnyitjuk, majd lefoglalunk egy akkora memória területet, melynek mérete egyezik a megnyitott állomány méretével.
    fs:=TFileStream.Create(FFileName, fmOpenReadWrite);
    GetMem(buffer, fs.Size);
    b:=buffer;
Ezt a memória területet feltöltjük véletlenszerű bájtokkal.
    for i:=0 to fs.Size-1 do begin
      b^:=Random(256);
      inc(b);
    end;
Ha ezzel is végeztünk, akkor már csak az marad hátra, hogy a memória terület tartalmát kiírjuk ebbe az állományba.
    fs.WriteBuffer(buffer, fs.Size);
    FlushFileBuffers(fs.Handle);
Most már nincs szükség a lefoglalt memóriaterületre, így felszabadítjuk azt.
    FreeMem(buffer);
    fs.Free;
Végül töröljük a felülírt állományt.
    DeleteFile(FFileName);
  end;
end;
A komponens használata most már igen egyszerű: csak adjunk meg egy állomány nevet, majd hívjuk meg az Execute eljárást.
procedure TForm1.Button1Click(Sender: TObject);
begin
  EliminateFile1.FileName:=ExtractFilePath(Application.ExeName)+'\1.txt';
  EliminateFile1.Execute;
end;