В приведённом выше исходнике ошибка. Таже самая ошибка встречается ещё кое-где в инете. Вот так вот люди не совсем честно копируют исходники друг у друга... вместе с ошибками.
Вот как я доработал код. Ниже приведена процедура обработки нажатия кнопки "Open" формы "Form1" и кнопки "Delete" (в последней процедуре используется TrackBar "Num" с вариантами надёжности удаления - количества переписываний файла). Вариант рабочего кода в совершенно никаком оформлени можно скачать в прикреплённом файле.
Код:
procedure TForm1.OpenClick(Sender: TObject);
var
FileName: string;
begin
OpenDialog1.Execute;
FileName:=OpenDialog1.FileName;
Path.Caption:= FileName;
end;
procedure TForm1.DeleteClick(Sender: TObject);
var
buffer: array [0..4095] of Byte;
max, n: LongInt;
i,j,k: Integer;
fs: TFileStream;
FileName: String;
begin
case Num.Position of
0: k:=1;
1: k:=3;
2: k:=5;
3: k:=10;
4: k:=15;
end;
FileName:= Path.Caption;
fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
try
for i := 1 to k do
begin
for j := Low(buffer) to High(buffer) do
buffer[j] := Random(256);
max := fs.Size;
fs.Position := 0;
while max > 0 do
begin
if max > SizeOf(buffer) then
n := SizeOf(buffer)
else
n := max;
fs.Write(Buffer, n);
max := max - n;
end;
FlushFileBuffers(fs.Handle);
end;
finally
fs.Free;
end;
Deletefile(FileName);
ShowMessage('Все пучком');
end;