Rubrik: Dateisystem · Dateien - allgemein | VB-Versionen: VB2005, VB2008 | 27.02.09 |
Datei sicher löschen Ein kleiner Trick - und eine mit der File.Delete-Anweisung gelöschte Datei lässt sich auch mit entsprechenden Tools nicht wieder herstellen. | ||
Autor: Dieter Otter | Bewertung: | Views: 15.082 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie löscht man eine Datei?
Einfach. Mit der IO.File.Delete von Visual Basic.
Eine auf diese Weise gelöscht Datei lässt sich aber i.a.R. mit entsprechenden Undelete-Tools wiederherstellen.
Was aber, wenn man eine Datei dauerhaft löschen will? D.h. eine Wiederherstellung soll nicht wieder möglich sein? Und das ganze natürlich aus der VB-Anwendung heraus, ohne irgend ein externes Tool einsetzen zu müssen.
Ein kleiner Trick - und eine mit der File.Delete-Methode gelöschte Datei lässt sich nicht wiederherstellen.
Und so geht's:
Bevor wir die entsprechende Datei "killen", überschreiben wir deren Inhalt mit "Nullzeichen". Danach wird die Datei gelöscht, und sollte diese mit einem Undelete-Tool wiederhergestellt werden, befinden sich nur Nullzeichen darin
Und hier der Code:
''' <summary> ''' Datei sicher löschen ''' </summary> ''' <param name="Filename">Dateiname mit vollständiger Pfadangabe</param> ''' <returns>True, wenn die Datei gelöscht werden konnte, andernfalls False.</returns> Public Function KillFile(ByVal Filename As String) As Boolean Try ' Existiert die Datei? If IO.File.Exists(Filename) Then ' Größe der Datei in Bytes ermitteln With New IO.FileInfo(Filename) Dim fileLen As Long = .Length ' jetzt Datei zum Schreiben öffnen und blockweise ' den Inhalt überschreiben Dim wStream As IO.FileStream = .OpenWrite() Dim curPos As Long = 0 Dim emptyBytes(2047) As Byte While curPos < fileLen Dim wLen As Long = fileLen - curPos If wLen > emptyBytes.Length Then wLen = emptyBytes.Length wStream.Write(emptyBytes, 0, wLen) curPos += wLen End While ' Datei schließen wStream.Flush() wStream.Close() End With ' jetzt löschen IO.File.Delete(Filename) Return True End If Catch ex As Exception Return False End Try End Function