воскресенье, 8 февраля 2009 г.

Удаление файла без возможности восстановления

Код писался не для практических целей, а как демонстрация работы теории.
Поэтому в нём много места для оптимизации, т.к. код работает довольно медленно.
Но свою задачу он выполняет. А задача простая – удалить файл с дистка так, чтобы его невозможно было восстановить.
procedure ZeroFillDelete(FileName: string);  
var
fs: TFileStream;
i: integer;
procedure RandomWrite;
var b: byte;
begin
repeat
b := Random(256); fs.Write(b, 1);
until fs.Position + 1 >= fs.Size;
end;
procedure WritePattern(pattern: byte);
const patt: array[5..31] of dword = ($555555, $AAAAAA, $924924, $492492,
$249249, 0, $111111, $222222, $333333, $444444, $555555, $666666,
$777777, $888888, $999999, $AAAAAA, $BBBBBB, $CCCCCC, $DDDDDD,
$EEEEEE, $FFFFFF, $924924, $492492, $249249, $6DB6DB, $B6DB6D, $DB6DB6);
var d: dword;
begin
d := patt[pattern] shl 8;
repeat fs.Write(d, 3); until fs.Position + 3 >= fs.Size;
end;
begin
if not FileExists(FileName) then Exit;
for i := 1 to 35 do
try
fs := TFileStream.Create(FileName, fmOpenWrite);
try
if (i < 5) or (i > 31) then RandomWrite
else WritePattern(i);
finally
fs.Free;
end;
except Exit; end;
DeleteFile(FileName);
end;

Комментариев нет:

Отправить комментарий