{ 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.