VB6: Inhalt einer Daten-Datei löschen

Hallo zusammen.

Wie kann ich den Inhalt einer Daten-Datei löschen?

Die Daten (in diesem Fall ein benutzerdefinierter Typ, der ineinander verschachtelte dynamische Datenfelder enthält) wurden mit ‚Put‘ in eine mit der ‚Open‘-Anweisung geöffneten Datei geschrieben.

Wenn sich die Größe der dynamischen Datenfelder verkleinert und die Daten wieder in die Datei geschrieben werden, dann bleibt „Text“ aus der vorherigen „Version“ erhalten. Diesen empfinde ich als sehr irritierend und möcht ihn weghaben.

Vielen Dank für Eure Tips.

VG
Carsten

Hallo Carsten,

zeig doch mal Code. Wie öffnest Du die Datei? Random?
Dann schreib’ mal Binary. Ungetestet, nur so 'ne Idee.
Schreib mal, ob das hilft.

Falls nein: Datei ‚For Output‘ öffnen und wieder schließen, dann ist sie zuverlässig leer.

Gruß Rainer

Hallo Carsten,

getestet, es geht leider nur so:

Private Type Daten
 Text As String \* 10
 Zahl As Long
End Type

Private Sub Command1\_Click()
 Dim na1 As String, na2 As String
 na1 = "C:\Test1.txt"
 na2 = "C:\Test2.txt"
 Dim ff As Integer
 Dim D() As Daten

 ReDim D(1)
 D(0).Text = "Test"
 D(0).Zahl = 1
 D(1).Text = "Versuch"
 D(1).Zahl = 2

 ff = FreeFile
 Open na1 For Random As #ff
 Put #ff, , D
 Close #ff

 ff = FreeFile
 Open na2 For Binary As #ff
 Put #ff, , D
 Close #ff

 ReDim Preserve D(0)

 ff = FreeFile
 Open na1 For Random As #ff
 Put #ff, , D
 Close #ff

 ff = FreeFile
 Open na2 For Output As #ff
 Close #ff

 ff = FreeFile
 Open na2 For Binary As #ff
 Put #ff, , D
 Close #ff
End Sub

Sowohl bei Random als auch bei Binary bleiben die alten Daten stehen.
Wir die Datei ‚For Output‘ geöffnet, kann man nicht mit Put schreiben.:frowning:

Gruß Rainer

Hallo Rainer

Sorry, das mit ‚For Binary‘ hatte ich vergessen.

Wir die Datei ‚For Output‘ geöffnet, kann man nicht mit Put
schreiben.:frowning:

Dein erster Tip hilft mit aber schon weiter. Ich habe es jetzt so gemacht:

Sub Write\_MainData()

'Lokale Variablen

 Dim FileMain As Long

'\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

 FileMain = FreeFile
 Open App.Path & "\" & App.Title & ".dat" For Output As FileMain
 Close FileMain
 Open App.Path & "\" & App.Title & ".dat" For Binary As FileMain
 Put FileMain, , MainData()
 Put FileMain, , List
 Close FileMain
End Sub

Jetzt stellt sich mir allerdings die Frage, ob man nicht einfach die Datei mit der ‚Kill‘-Anweisung löschen könnte, bevor man sie wieder schreibt.
Würde dadurch eventuell die Festplatte mehr „abnutzen“? (ich weiß nicht, wie ich das anders formulieren soll)

VG
Carsten

was macht KIll auf der Festplatte

Jetzt stellt sich mir allerdings die Frage, ob man nicht
einfach die Datei mit der ‚Kill‘-Anweisung löschen könnte,
bevor man sie wieder schreibt.
Würde dadurch eventuell die Festplatte mehr „abnutzen“? (ich
weiß nicht, wie ich das anders formulieren soll)

Hallo Carsten,

Fesplatten kann mna zumindest FAT oder NTFS formatieren. Bei FAT weiß ichs, bei NTFS soll es aber ähnlich sein.

Wenn du in FAT eine Datei löschst so bleiben die Bytes der Datei vollständig erhalten.
In der FAT, bzw. FAT heißt ja File Allocation Table, stehen die Namen und die Anfangsadressen aller Dateien.

Bei gelöschten Dateien wird dann einfach der erste Buchstabe des Namens durch ein Fragezeichen ersetzt.
Dadurch (und vielleicht noch andere Abläufe) sind dann die von der Datei auf der Festplatte belegten Plätze wieder frei verfügbar.

D.h. wenn du jetzt auf der Festplatte neue Dateien draufschreibst werden die auf die freien Plätze verteilt.
Das können Plätze sein die vorher durch die „gekillte“ Datei belegt waren oder andere.

Je nachdem was da geschieht hast du nun durch Rettungsprogramme die gelöchte Dateien wieder herstellen können soundsoviel gute Chancen die Datei wiederherzustellen.

Also nach einer versehentlichen Dateilöschung alles sofort unterbinden was auf die Platte schreiben will, automatische Updates, sonstwas. Kiste möglichst ausschalten und sich das Rettungsprogramm auf einem Stick, CD, Diskette besorgen und es von da aus dann starten.

Wenn das versagt müssen Profis ran (teuer), die schauen sich die Bits der FestplattenBytes mit Spezialsoft- und Hardware genauestens an um herauszufinden was denn unter der 1 oder 0 steht die man nun neu sieht, also was vorher da stand.

Achso, was ich eigentlich nur sagen wollte, „Kill“ macht auf deiner Festplatte nahezu nichts bei FAT-Systemen :smile:))

Gruß
Reinhard

Hallo Carsten,

ich möchte nur bestätigen, was Reinhard schon geschrieben hat.
Kill schadet Deiner Platte auch nicht, wird wohl das selbe tun, wie der jetzige Code.

Gruß Rainer