![]() |
35 Mal überschreiben
Ich habe diesen Code, der eine Datei 6 mal überschreibt.
Nun will ich, dass er diese Datei 35 Mal überschreibt. Was muss ich ändern? (Beim Pfeil "Hier")
Delphi-Quellcode:
procedure EraseFile(Filename: string);
const Buffer = 1024; FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00); //<-- Hier var arr: array[1..Buffer] of byte; f: file; i, j, n: integer; begin AssignFile(f, FileName); Reset(f, 1); n := FileSize(f); for j := 0 to 5 do begin for i := 1 to n div Buffer do begin BlockWrite(f, FillBuffer[j], Buffer); end; end; CloseFile(f); RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp'); DeleteFile(ExtractFilepath(Filename)+'$000000.tmp'); end; |
Re: 35 Mal überschreiben
Ich denke, du musst überall die "5" durch die "34" ersetzen. Bin mir aber nicht sicher.
Edit: Zu der Klammer: Weißt du, was die einzelnen Werte bedeuten? |
Re: 35 Mal überschreiben
"FillBuffer" wird "das" sein, was nacheinander über die datei geschrieben wird!
mach einfach was in der art
Code:
draus
FillBuffer: array[0..35] of Integer = ($00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00...)
oder lass dein fillbuffer und änder deine schleife in etwas wie ungefähr:
Delphi-Quellcode:
vom prinzip her halt, nicht getestet
for j := 0 to 35 do
begin for i := 1 to n div Buffer do begin BlockWrite(f, FillBuffer[j mod 5], Buffer); end; end; stefan |
Re: 35 Mal überschreiben
Das was in der Klammer steht ist doch der "Fill Buffer".
Ist also nur das womit überschrieben wird, oder?!? Wenn überhaupt, dann würde ich das wie Matze schon sagt die 5 in der for-Schleife durch eine 35 ersetzen. Das ist ja ne Zählervariable die angibt wie oft überschrieben wird... MfG Florian :hi: [edit] Oh... derbe zu spät... [/edit] |
Re: 35 Mal überschreiben
Bitte:
Delphi-Quellcode:
Die Konstante "Counttowrite" gibt an wieviel mal du das überschreiben willst.
procedure EraseFile(Filename: string);
const Buffer = 1024; Counttowrite = 34; FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00); //<-- Hier var arr: array[1..Buffer] of byte; f: file; i, j, n: integer; begin AssignFile(f, FileName); Reset(f, 1); n := FileSize(f); for j := 0 to Counttowrite do begin for i := 1 to n div Buffer do begin BlockWrite(f, FillBuffer[j], Buffer); end; end; CloseFile(f); RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp'); DeleteFile(ExtractFilepath(Filename)+'$000000.tmp'); end; [OT] war wohl etwas zu langsam [/OT] |
Re: 35 Mal überschreiben
Was muss ich jetzt an deinem Code ändern, wenn ich es 35 mal
überschreiben will? Etwa so???
Delphi-Quellcode:
procedure EraseFile(Filename: string);
const Buffer = 1024; Counttowrite = 34; FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00) var arr: array[1..Buffer] of byte; f: file; i, j, n: integer; begin AssignFile(f, FileName); Reset(f, 1); n := FileSize(f); for j := 35 to Counttowrite do //<-- Hier begin for i := 1 to n div Buffer do begin BlockWrite(f, FillBuffer[j], Buffer); end; end; CloseFile(f); RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp'); DeleteFile(ExtractFilepath(Filename)+'$000000.tmp'); end; |
Re: 35 Mal überschreiben
Zitat:
Denn BlockWrite ist eine gepufferte Funktion; es ist nicht sicher, dass die Daten jemals alle auf die Platte kommen. 35-faches Überschreiben ist übertrieben; am Besten man füllt die Datei zum Schluss mit zufälligen Schrottdaten, dann versagt jedes Partial Response Verfahren. Hier ist mein Gegenvorschlag:
Delphi-Quellcode:
procedure ShredderFile(const filename:string);
const Fillchars: array[0..5] of char = (Char($00), Char($FF), Char($00), Char($F0), Char($0F), Char($00)); BLOCK_SIZE = 8096; var fs : TFileStream; buffer : String; i, j : Integer; begin fs := TFileStream.Create(filename, fmOpenReadWrite or fmShareExclusive); try // Datei auf nächste Blockgrösse verlängern, damit der "Slack" überschrieben // wird fs.Size := ((fs.Size div BLOCK_SIZE) +2) * BLOCK_SIZE; // Datei soll mindestens 2 MB gross sein, damit die Schreibcaches der // Festplatten überflutet werden if fs.Size < 2097152 then fs.Size := 2097152; for i := 0 to 5 do begin fs.Position := 0; buffer := StringofChar(Fillchars[i], BLOCK_SIZE); for j := 1 to fs.Size div BLOCK_SIZE do begin fs.WriteBuffer(buffer[1], BLOCK_SIZE); end; FlushFileBuffers(fs.Handle); end; // wir verarschen den Geheimdienst und schreiben zum Schluss // seltsame Schrottdaten // wirkliche Zufallsdaten wären besser, aber das reicht doch auch schon buffer := 'Terror, Bin Laden, Sprengstoff, Waffen, Plutonium'; fs.Position := 0; for j := 1 to fs.Size div Length(buffer) do begin fs.WriteBuffer(buffer[1], Length(buffer)); end; finally fs.Free; end; end; procedure ShredderAndDeleteFile(const filename:string); var newname : string; begin // zuerst umbennen, dann später keine Rückschlüsse auf den Dateinamen möglich sind newname := ExtractFilepath(Filename)+'$000000.tmp'; if not RenameFile(Filename, newname) then raise Exception.CreateFmt('Can''t rename file %s', [filename]); ShredderFile(newname); DeleteFile(newname); end; |
Re: 35 Mal überschreiben
Ne, also bissle überlegen solltest du schon:
Delphi-Quellcode:
Counttowrite hat den Wert 34.
for j := 35 to Counttowrite do
Somit kann die for-Schleife gar nicht durchlaufen werden. Du kannst den Code von Spezi1980 1:1 übernehmen. |
Re: 35 Mal überschreiben
LOL
Delphi-Quellcode:
Aber er Code geht supa! Vielen Dank!
// wir verarschen den Geheimdienst und schreiben zum Schluss
// seltsame Schrottdaten // wirkliche Zufallsdaten wären besser, aber das reicht doch auch schon buffer := 'Terror, Bin Laden, Sprengstoff, Waffen, Plutonium'; |
Re: 35 Mal überschreiben
Verscht ihr den HW764 oder verarscht der uns?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz