Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.287 Beiträge
 
Delphi 12 Athens
 
#5

Re: Datei sicher löschen

  Alt 29. Apr 2010, 17:37
*überleg*

Da beide Codes mit Dateien über 2, bzw. 4 GB Probleme haben ....
keinen


Ich würde jetzt auf die Schnelle 'nen Teil vom Letzeren etwas verändert verwenden:
Delphi-Quellcode:
procedure WipeFile(const FileName: string);
var
  buffer: array [0..8191] of Byte;
  i: Int64;
  fs: TFileStream;

begin
  fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
  try
    i := fs.Size;
    while i > 0 do
    begin
      fs.WriteBuffer(Buffer, SizeOf(buffer));
      Dec(i, SizeOf(buffer));
    end;
    FlushFileBuffers(fs.Handle);
  finally
    fs.Free;
  end;
  DeleteFile(FileName);
end;
und dann für größere Dateien noch ein bissl die Speicherverwaltung/WindowsFileCache optimieren:
Delphi-Quellcode:
procedure WipeFile(const FileName: string);
var
  buffer: array [0..8191] of Byte;
  i: Int64;
  fs: TFileStream;

begin
  fs := TFilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
  try
    i := (fs.Size + SizeOf(buffer) - 1) div SizeOf(buffer);
    while i > 0 do
    begin
      fs.WriteBuffer(Buffer, SizeOf(buffer));
      if i and $7F = 0 then FlushFileBuffers(fs.Handle);
      Dec(i);
    end;
    FlushFileBuffers(fs.Handle);
  finally
    fs.Free;
  end;
  DeleteFile(FileName);
end;
Stattdessen könnte man auch direkt die WinAPI verwenden.
> CreateFile OPEN_EXISTING FILE_FLAG_WRITE_THROUGH FILE_FLAG_SEQUENTIAL_SCAN


Zitat von p80286:
Ach ja Cluster oder Sektor-G?
Nimm das was größer ist, damit kein Verschnitt übrig bleibt.
Clustergröße = n * Sektorgröße

Zitat von p80286:
1) was ist mit den Alt.DataStreams?
Die bleiben erhalten

Zitat:
// zuerst umbennen, dann später keine Rückschlüsse auf den Dateinamen möglich sind
NTFS ist ein JFS (JournalingFileSystem) und merkt sich alles mögliche.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat