Seite 1 von 1

String in Datei schreiben

Verfasst: 26.10.2004 16:54
von pbdau
:shock:

Wie kann ich einen String in eine Datei schreiben? Das Skript soll per Zufallsgenerator Zahlen errechnen und dann in eine Datei schreiben.
Welchen Befehl brauche ich, um an die Datei wieder einen String anzuhängen? Die Datei soll sich so auf ca. 100 MB aufblähen. Gedacht, um den freien Bereich der HD mit Müll vollzuschreiben um gelöschte Dateien zu überschreiben.

Code: Alles auswählen

For Schleife0 = 1 To 32766
  ZUFALL0 = Random(9)
  ZUFALL0a$ = Str(ZUFALL0)
  string0$ = ZUFALL0a$+string0$
Next
CreateFile(#PB_Any,"c:\muell.txt")
OpenFile(#PB_Any,"C:\muell.txt")
WriteString(string0$)
CloseFile(#PB_Any)
Input()
Bei WriteString kommt eine Fehlermeldung.

edit redacid: code-tags gesetzt.

Verfasst: 26.10.2004 17:06
von Ynnus
Da nimm doch lieber SafeErase, ist freeware, und entsorgt zu löschende Dateien 99% sicher. (mit höchster Sicherheitsstufe überschreibt es die Daten 27 mal mit Zufallswerten und co. Da findet kein Recoverytool mehr was. ;))

Ansonsten, wenn es umbedingt ein eigenes Programm sein soll, createfile() offnet bereits die Datei, es wird kein openfile mehr benötigt.
und #PB_Any in dieser Verbindung dürfte so imo nicht klappen, da er ja nicht weiß, ich welche Datei er den String schreiben soll. Versuch es mal so:
Wichtig: Die Datei müsste ca. 100 MB groß werden, wenn ich mich nicht verrechnet habe...

Code: Alles auswählen

CreateFile(0,"c:\muell.txt")
  For Schleife0 = 1 To 104857600
    WriteString(Str(Random(9)))
  Next
CloseFile(0)
Ach ja, 100 MB, das ist ne verdammt große Menge! Und wie löschst du dann diese Dateien sicher ohne fragmente zu hinterlassen welche die Festplatte übrigends sehr langsam machen?

Verfasst: 26.10.2004 17:22
von NicTheQuick
Ich würde das ganze so machen.

Code: Alles auswählen

Size = 100 * 1024 * 1024
File.s = "J:\Vollschreibdatei.dat"

*Mem = AllocateMemory(Size)

If *Mem
  *p.LONG = *Mem
  *pEnd = *Mem + Size - 1
  
  While *p < *pEnd
    *p\l = Random($FFFF) << 16 + Random($FFFF)
    *p + 4
  Wend
  
  FileID = CreateFile(#PB_Any, File)
  If FileID
    WriteData(*Mem, Size)
    CloseFile(FileID)
  EndIf
  FreeMemory(*Mem)
EndIf
Das setzt natürlich die gleiche Menge Arbeitsspeicher vorraus wie die Datei groß sein soll.

Verfasst: 26.10.2004 17:26
von Ynnus
Naja, Nic's Variante ist mit Sicherheit die schnellere, um mehr als das hundertfache sicher. Allerdings glaube ich nicht, dass pbdau damit etwas anfangen kann. Das sind dann doch etwas zu viele Pointer und Berechnungen. Und der Fehler lag ja nun daran, dass er die #PB_Any Konstante verwendet hatte, welche man in seinem Fall aber nicht nehmen dürfte.

Verfasst: 26.10.2004 17:45
von Falko
Vielleicht ist NTQ ja schneller.
Habe es etwas anders gemacht. Bei jedem Start wird das Zufallsprodukt
angehängt. :mrgreen:

MfG Falko

Code: Alles auswählen

Procedure PB_Append()
 FileSeek(Lof());
EndProcedure

Datei$="TestAnhang.txt"

OpenFile(0,Datei$)
PB_Append()
For Schleife0 = 1 To 32766 
  ZUFALL0 = Random(9) 
  ZUFALL0a$ = Str(ZUFALL0) 
  string0$ = ZUFALL0a$+string0$ 
Next 
WriteString(string0$)
CloseFile(0)

Danke

Verfasst: 26.10.2004 18:01
von pbdau
vielen vielen Dank, auch wenn ich (leider) die ganzen Hilfen noch nicht verstehe. Aber nach dem Entfernen von #PB_Any (für was auch immer das gut sein mag...) funzt es jetzt wenigstens.
Der tiefere Sinn des Tools (wenn es irgendwann mal fertig ist, soll sein, die freien Bereiche der Festplatte vollständig mit Müll zu beschreiben und danach den Müll wieder zu löschen. Die Dateien sollten möglichst gross sein, damit im Filesystem möglichst wenig Einträge sind. Da man nie weiss, wo Windoof seine Dateien ablegt, ist das die schnellste und sicherste Art, sämtliche Dateien zu überschreiben. Dadurch, dass nicht lauter einheitliche Zeichen (0,1 o.ä.) auf der Festplatte sind, dürfte das Problem des Restmagnetismus der alten Datei erheblich schwerer zu knacken sein. Ist sinnvoll, wenn man eine alte Festplatte mit geheimen Daten verschenken will o.ä.

PS: Wie heisst der Befehl, um eine Zahl in ASCII-Code umzuwandeln, d.h. aus 92 soll \ werden?

Verfasst: 26.10.2004 18:08
von SoS
Debug Chr(92)

Verfasst: 26.10.2004 18:35
von Sylvia
@Nic:
Welchen Lehrer hast du gehabt ? So einen Crypt-Code abzuliefern...ist ja
richtig ekelhaft! Meinst du das bringt einem Anfänger was ?

Deine Hilfsbereitschaft in Ehren, aber bitte...etwas mehr Transparenz !

Verfasst: 26.10.2004 19:02
von NicTheQuick
@Sylvia:
Tja, ich hatte eben keinen Lehrer.
Außerdem ist das kein Crypt-Code, denn jeder der PB ein bisschen kennt, wird sich damit direkt zurechtfinden.

Klar muss ich gestehen, dass ich nicht daran gedacht hatte, dass der Threadstarter sich noch so gut wie gar nicht mit PB auskennt.

Verfasst: 26.10.2004 19:04
von Rob
Der Code ist doch ok. Was fehlt sind Kommentare...