Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Beliebig große leere Dateien erzeugen (https://www.delphipraxis.net/60311-beliebig-grosse-leere-dateien-erzeugen.html)

freak4fun 5. Jan 2006 08:29


Beliebig große leere Dateien erzeugen
 
Hallo :hi:,
ich möchte eine Datei erzeugen, die den gesammten freien Platz auf der Festplatte ausfüllt. Dabei soll, wenn man die Datei wieder löscht nur Nullen auf der Festplatte(Hardware) zurückbleiben. Die Datei muss keine spezielle Endung haben. Kann mir da einer weiterhelfen? Oder kann man vielleicht auch anders den gesammten freien Speicherplatz mit Nullen auffüllen?

Wenn das zu unklar ist ist bitte fragen. ;)

MfG
freak

Vjay 5. Jan 2006 09:09

Re: Beliebig große leere Dateien erzeugen
 
Hallo Christian,

herausfinden wieviel Platz verfügbar ist: GetDiskFreeSpace

Ich habe nie versucht mit TFileStream eine Datei > 2/4 GB zu erzeugen, weiß also nicht ob dies funktionieren wird. Ansonsten createFile verwenden und mit writeFile solange schreiben bis die gewünschte Größe erreicht ist.

Beachten solltest du, dass ein einfaches setzen der Größe nicht ausreicht, um wirklich Nullen auf die Festplatte zu schreiben.
Die Win32API-Hilfe sagt nämlich dazu
Zitat:

SetEndOfFile: This function can be used to truncate or extend a file. If the file is extended, the contents of the file between the old EOF position and the new position are not defined.
TFileStream nutzt ebenfalls diese Funktion.
Sie dient eher dem Dateisystem die Datei im voraus möglichst optimal anzuordnen. Somit bräuchtest du den freien Speicher eigentlich garnicht ermitteln - du schreibst einfach so lange bis es nicht mehr geht. Beachte aber die Maximalgrößen für Dateien der unterschiedlichen Systeme.

Ich ahne übrigens was du vor hast, dir soll versichert sein, dass ein einmaliges Überschreiben ein professionelles Labor nicht davon abhalten wird, deine Daten zu rekonstruieren. Ein einfaches Undelete-Programm dürftest du allerdings aus dem Tritt bringen.

Dennoch solltest du dir überlegen, ob du an die Sache nicht doch anders rangehst, denn eine bis auf das letzte Byte gefüllte HD dürfte dir so ziemlich jedes OS und Programm verübeln.

Ein globaler Funktionshook auf deleteFile/setEndOfFile wäre imho viel schöner, du könntest dann alle gelöschten Files in eine Liste aufnehmen und später wenn die HD idle ist mehrfach mit 1 und 0 überschreiben. Bei Google suchenMST Defrag macht vor, dass so etwas funktioniert.

freak4fun 5. Jan 2006 09:19

Re: Beliebig große leere Dateien erzeugen
 
Hallo Vjay :hi:,
danke für die schnelle Antwort.

Zitat:

Zitat von Vjay
Ich ahne übrigens was du vor hast...

Daran solltest du noch arbeiten. :mrgreen: Aber ich hätte wahrscheinlich die gleiche Schlussfolgerung gezogen. :stupid: Mir geht es aber um etwas Anderes. Und zwar arbeite ich mit VMs. Wenn man diese nun kopiert wird der gesammte freie Speicher mit kopiert. Das passiert allerdings nicht, wenn der freie Speicherplatz auf der VM-Festplatte mit Nullen gefüllt ist. Dadurch wird dann die kopierte VM kleiner. ;)

MfG
freak

Vjay 5. Jan 2006 09:28

Re: Beliebig große leere Dateien erzeugen
 
:-P
Arbeitest du mit VM-Ware? Dort gibt es jedenfalls die Shrink-Funktion, diese kümmert sich auch darum, daß die Dateien an den Anfang der virtuellen Platte verschoben werden.

freak4fun 5. Jan 2006 09:41

Re: Beliebig große leere Dateien erzeugen
 
Zitat:

Zitat von Vjay
Arbeitest du mit VM-Ware? Dort gibt es jedenfalls die Shrink-Funktion, diese kümmert sich auch darum, daß die Dateien an den Anfang der virtuellen Platte verschoben werden.

Ja, ich arbeite mit VM-Ware. Wo finde ich denn die Shrink-Funktion? Macht diese Funktion das, was ich machen will? :wiejetzt:

Ich bin leicht verwirrt. :stupid: Das Programm ist ja nicht direkt für mich. Ich kenne mich mit VM eigentlich nicht so gut aus. Ich wurde halt darum gebeten. Wenn es natürlich eine einfache schon vorhandene Funktionalität gibt wäre das auch ok. ;)

MfG
freak

freak4fun 5. Jan 2006 10:26

Re: Beliebig große leere Dateien erzeugen
 
Ok, ich weiß jetzt wie ich den freien Speicher bekomme. Wie kann ich jetzt alle Bits (Heißen die so? :gruebel: ) auf Null setzen? Was auch schön wäre, wenn man das noch prüfen könnte, ob die Null sind (Ist aber nur optional :mrgreen: ).

@Vjay: Mein Kollege meint das Verschieben alleine reicht nicht.

MfG
freak

Vjay 5. Jan 2006 16:50

Re: Beliebig große leere Dateien erzeugen
 
Arbeitest du/er mit dynamischen oder statischen Containern? In den VM-Ware Tools die auf dem Guest-System installiert sind, bzw. wenn du in die Eigenschaften der VM gehst und die HD anklickst.

Zitat:

Wie kann ich jetzt alle Bits (Heißen die so? ) auf Null setzen?
Ja die heißen so. Indem du ein #0 in die Datei schreibst, setzt du 8 Bits auf 0 ;)

Zitat:

Was auch schön wäre, wenn man das noch prüfen könnte, ob die Null sind (Ist aber nur optional ).
Sicher, indem du die Datei wieder öffnest und einliest.

freak4fun 16. Jan 2006 14:55

Re: Beliebig große leere Dateien erzeugen
 
Ich erzeuge eine Datei mit:
Delphi-Quellcode:
AssignFile(f, AFileName);
  try
    Rewrite(f);
  finally
    CloseFile(f);
  end;
und schreibe dann mit:

Delphi-Quellcode:
var
  lBuffer: array [0..524287] of Byte;
begin
  ...
  lFileStream.WriteBuffer(lBuffer, SizeOf(lBuffer));
Geht das Schreiben irgendwie schneller?

MfG
freak

Cicaro 16. Jan 2006 15:04

Re: Beliebig große leere Dateien erzeugen
 
TFileStream wäre vielleicht eine Hilfe zum Erzeugen von Dateien, die keine besondere Bedeutung haben.

freak4fun 16. Jan 2006 15:39

Re: Beliebig große leere Dateien erzeugen
 
Zitat:

Zitat von Cicaro
TFileStream wäre vielleicht eine Hilfe zum Erzeugen von Dateien, die keine besondere Bedeutung haben.

Delphi-Quellcode:
lFileStream := TFileStream.Create(AFileName, fmOpenWrite);
:| Das mach ich schon.

MfG
freak


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz