In a current project I'm required to detect a text file in a folder, 
encrypt it and send it to a recipient. No problem; I'll use LockBox for 
the encryption. The files contain health data which may be sensitive and 
after confirming receipt of the data, the files should be deleted from 
the folder. The customer has also asked that the files should be 
shredded.  A professional disk recovery exercise is unlikely, but they 
do want to avoid a deleted file being recovered if one of their laptops 
is lost or stolen.

I don't know enough about how Windows handles files: would it be enough 
to overwrite the file, maybe something like the code below? This relies 
on Windows saving the file(s) in exactly the same locations on disk and 
I suspect this will not always be the case.  Does anyone know of a 
better way, or a component that will shred a file from within a Delphi app?

Many thanks for all suggestions,

Rob


procedure OverWriteandDelete(FileName: string; N: integer);
// Overwrite a file N times then delete it
// File2String(FileName) and String2File are taken from "ExeMod" written 
by G.A. Carpenter
// (see below)
var
 TempString: string;
 k: integer;
C: char;
begin
   TempString := File2String(FileName);
 
 // overwrite the file N times, saving to disk each time
 for k := 1 to N do
  begin
   C := chr(65 + random(50));
   String2File(StringOfChar(C, length(TempString)), FileName);
  end;

  // empty the string in memory
  ZeroMemory(@TempString, SizeOf(TempString));

   // delete the file from disk
   DeleteFile(FileName);
end;

// These two methods are taken from "ExeMod" written by G.A. Carpenter:

//This code can write any string to disk as a file
procedure String2File(String2BeSaved, FileName: string);
var
 MyStream: TMemoryStream;
begin
 if String2BeSaved = '' then exit;
 SetCurrentDir(ExtractFilePath(Application.ExeName));
 MyStream := TMemoryStream.Create;
 try
   MyStream.WriteBuffer(Pointer(String2BeSaved)^, Length(String2BeSaved));
   MyStream.SaveToFile(FileName);
 finally
   MyStream.Free;
 end;
end;

//This code can read any file from disk and into a string:
function File2String(FileName: string): string;
var
 MyStream: TFileStream;
 MyString: string;
begin
 MyStream := TFileStream.Create(FileName, fmOpenRead
   or fmShareDenyNone);
 try
   MyStream.Position := 0;
   SetLength(MyString, MyStream.Size);
   MyStream.ReadBuffer(Pointer(MyString)^, MyStream.Size);
 finally
   MyStream.Free;
 end;
 Result := MyString;
end;



 
_______________________________________________
Delphi mailing list -> [email protected]
http://lists.elists.org/cgi-bin/mailman/listinfo/delphi

Reply via email to