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.
MST Defrag macht vor, dass so etwas funktioniert.
Wer später bremst ist eher tot.