[Back to FILES SWAG index] [Back to Main SWAG index] [Original]
{
Erik Appeldoorn
I've made a programm which erases a file absolutely and completely. Even when
it is undeleted it containes nothing.. So far so good.. But when I make a
sector-dump of the disk, it appears that there is still some text on the disk.
I don't get it. Nowhere in my programm I allocated text to memory, but the same
three sentences apear four times in the sector-dump. In the original file the
sentences begin at sentence number 1103. In the sector-dump the four blocks
appear at numbers 72 & 130 & 188 & 248. The totall dump is 251 sentences.
The floppy was newly formatted. What could be happening? Here's part of the
code.
}
var ZapFile:File;
ZapFileName:String;
ZapFilePos:Longint;
Buffer:array [1..406] of byte;
NumWritten, BufferSize, NumRead: word;
Procedure deleting(ZapFileName:string);
begin
Buffersize:=SizeOf(Buffer);
Assign(ZapFile,ZapFileName);
{$I-}
Reset(ZapFile,1);
{$I+}
repeat
ZapFilePos:=FilePos(ZapFile);
BlockRead(ZapFile,Buffer,BufferSize,NumRead);
FillChar(Buffer,BufferSize,#255);
Seek(ZapFile,ZapFilePos);
BlockWrite(ZapFile,Buffer,NumRead,NumWritten);
until (NumRead=0) or (NumWritten<>NumRead);
close(ZapFile);
Erase(ZapFile);
end;
{
Jan Doggen
I only had time to take a quick look; here are my suggestions:
- forget the reads
- make a CONST buffer, fill it with garbage or zeroes
(*in* the proc, so that it takes only stack space)
- FS := FileSize(ZapFile)
NrBlocks := FS DIV BufferSize
LastBlockSize := FS MOD BufferSize
For i:=1 to nrblocks blockwrite
If lastblocksize<>0 write that amount (never mind that the buffer is
larger)
close the file
- forget the $I. You don't query IOResult after $I, so all subsequent
I/O (on *all* files) goes wrong until you do. RTM.
- Instaed of this, use a FileExist function before you call your
proc.
}
[Back to FILES SWAG index] [Back to Main SWAG index] [Original]