Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Eine Datei mit Zufallsdaten überschreiben


Marco D. - Di 17.10.06 18:32
Titel: Eine Datei mit Zufallsdaten überschreiben

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.OverwriteFile(Filename: string; number: integer;);
var stream: TFilestream; i,zahl: integer;
begin
  stream := TFilestream.Create(filename,fmOpenWrite);
  randomize;
  for i := 1 to number do
  begin
     zahl := random(1);
     stream.Write(zahl,SizeOf(zahl))
  end;
  FreeAndNil(stream);
end;

Habe für ein Programm diesen Algorithmus gschrieben. Er soll eine Datei unleserlich machen. Wenn man eine Datei unter Windows löscht, kann man sie ja normalerweise leicht wiederherstellen. Diese Prozedur soll so eine Datei mit Zufallsdaten überschreiben.
Was haltet ihr von ihr? Optimierungen? Ist das so Quatsch?


Narses - Di 17.10.06 18:38

Moin!

Wenn "number" die Menge in Bytes sein soll, fliegt dir das um die Ohren bzw. schreibt die 4fache Datenmenge. ;)

cu
Narses


Horst_H - Di 17.10.06 18:58

Hallo,

random(1) ist immer 0
Lieber random(256*256) und eine 2-Byte Wert fuer Zahl benutzen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.OverwriteFile(Filename: string; number: integer;); 
var stream: TFilestream; i: integer;zahl:word; 
begin 
  stream := TFilestream.Create(filename,fmOpenWrite); 
  randomize; 
  for i := 1 to number do 
  begin 
     zahl := random(256*256); 
     stream.Write(@zahl,SizeOf(zahl)) 
  end
  FreeAndNil(stream); 
end;

Ausserdem darf number nicht größer als die Dateigröße/2 sein, wie Narses schon sagte.
Muss ich mal testen.

Gruss Horst


Delete - Di 17.10.06 19:47

Siehe hier: http://www.delphipraxis.net/topic94669_eine+datei+mit+zufallsdaten+uumlberschreiben.html

@Horst_H: Und was ist der Unterschied zu 65536 außer dass du den Rechner noch unnötig mit einer Fließkommamultiplikation beschäftigst?


Marco D. - Di 17.10.06 20:59

Warum denn einen 2-Byte-Wert nehmen?


Horst_H - Di 17.10.06 21:20

Hallo,

@Luckie:
wo ist da eine Fliesskommarechnung? Da wird doch vom Compiler ohnehin die Konstante zusammengefasst.

@Marco:
Weil der nur integer Zahlen von 0..2^31-1 ohne die negativen Zahlen erzeugt werden, also waere Bit 31(0..31) immer 0 und nicht zufällig.

Gruss Horst


Marco D. - Di 17.10.06 21:24

Und warum steht bei dir vor zahl ein @?


Horst_H - Di 17.10.06 21:31

Hallo,

weil es falsch ist ;-)

Gruss Horst