[Back to FILES SWAG index] [Back to Main SWAG index] [Original]
{
Although, I can not gaurentee this is correct, but it WILL stop Undel
from PCTools, Undel from nortons, and undelete from dos. (tested) Although
I don't have the time to play around with a sector editor:
}
{$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}
Uses crt,dos;
Const
Product = 'WipeFile';
Version = '1.00a';
Release = 'Gamma';
Author = 'John Stephenson';
Procedure WipeFile(fn: string);
Var
size,
total: longint;
loop,towrite,numwritten: word;
f: file;
buffer: array[1..1024] of byte;
begin
assign(f,fn);
setfattr(f,0);
if doserror = 0 then begin
{ DOS will normally keep the rest of the file name, and just truncate
it with a null. But when the full filename is renamed then that can't
be done. Then it renames it to ~ so that undelete will just show
a question mark, and same with a sector editor on the hd }
rename(f,'~~~~~~~~.~~~');
rename(f,'~');
{ Randomize a buffer for later use when we erase the file }
for loop := 1 to sizeof(buffer) do buffer[loop] := random(256);
{ Then we must completely rewrite the file, starting from byte one
to the filesize, completely erasing all sector data. Very easily
done, using a random buffer to write with. }
reset(f,1);
size := filesize(f);
total := 0;
repeat
{ Figure out how much to write }
towrite := sizeof(buffer);
if towrite+total > size then towrite := size - total;
blockwrite(f,buffer,towrite,numwritten);
inc(total,numwritten);
until total = size;
{ Now we seek to the first byte of the file, and truncate it there,
leaving it a measly 0 bytes }
Seek(f,0);
Truncate(f);
{ Now we will close up the file, and delete it }
close(f);
erase(f);
end;
end;
var
loop: byte;
fn: pathstr;
begin
if paramcount = 0 then begin
textattr := lightcyan;
writeln(product+' v'+version+' '+release+' by '+author+#10);
textattr := lightgray;
writeln('Completely erases file contents, and filename from FAT and');
writeln('from the actual disk. Very throughly done!'#10);
writeln('Summary of action: þ Un-attributes file.');
writeln(' þ Renames FAT file name.');
writeln(' þ Rewrites file contents with a random buffer');
writeln(' þ Truncates file to 0 bytes.');
writeln(' þ Erases file.');
halt(1);
end;
randomize;
for loop := 1 to paramcount do begin
Fn := paramstr(loop);
write('Wiping: ',fn,'...');
wipefile(fn);
writeln(' Done!');
end;
end.
[Back to FILES SWAG index] [Back to Main SWAG index] [Original]