Feedback

VB - Dateien sicher löschen

Veröffentlicht von am 2/22/2016
(0 Bewertungen)
Mit dieser Klasse kann man Dateien durch mehrfaches überschreiben sicher löschen. Dabei werden einfach die Anzahl der Bytes ausgelesen und dann durch zufällige Buchstaben ersetzt.
Imports System.IO
Imports System.Text
Imports System.Threading
    Public Class SafedeleteFunction
        Public Property DelThread As Thread
        Public Function SafeEraser(filepath As String, repeat As Integer, delete As Boolean)
            Dim r As New Random
            Dim sb As New StringBuilder
            Dim abc = "abcdefghijklmnopqrstuvwxyz"
            Try
                For i = 0 To repeat
                    Dim idx As Integer = r.Next(0, abc.Length)
                    Dim filesize As New FileStream(filepath, FileMode.Open)
                    Dim fsize = CInt(Int(filesize.Length))
                    filesize.Close()
                    Dim fstream As New StreamWriter(filepath)
                    sb.Append(abc.Substring(idx, 1))
                    For o = 0 To CInt(fsize)
                        fstream.Write(sb.ToString)
                    Next
                    sb.Clear()
                    fstream.Close()
                Next
            Catch ex As Exception
            End Try
            Try
                If delete = True Then
                    File.Delete(filepath)
                Else
                End If
            Catch ex As Exception
                MsgBox("File could not be deleted: " & ErrorToString(), MsgBoxStyle.Critical)
            End Try
        End Function
    End Class

3 Kommentare zum Snippet

Koopakiller schrieb am 2/22/2016:
Hast du irgendwelche Beweise dafür, dass dein Code funktioniert? Ich befürchte das Windows oder .NET eben nicht exakt die Teile des Speichers wieder überschreiben die man erwarten würde.

So oder so wäre ein Using-Block für die Streams angebracht.
Johnny the Bit schrieb am 2/23/2016:
Klar hab ich beweise dafür, erstell du dir eine Datei und lösche sie mit diesr Funktion mal und versuche sie mal wieder wiederherzustellen, z.b. mit Recuva. Also ich denke das .Net schon exakt die Teile des Speichers überschreibt. Wäre ja fatal für Microsoft wenn VB nicht einmal mit Bits und Bytes arbeiten könnte oder? Oder war deine frage darauf bezogen auf den Speicherort, ob genau dort dieser auch abgeändert wird? Klar wird er dass, zwar teilt das NTFS Format die Bytes auf der Festplatte auf, weshalb es als langsam gilt, jedoch wenn ein Speicherort verarbeitet wird und die Größe sich nicht um ein Byte vergrößert bleibt es an diesem Speicherort, und dies ist auch beim Überschreiben wichtig das nicht zu viel überschrieben oder zu wenig überschrieben wird, sondern exakt wie die Originalgröße ist um die Speicherpostition auf der Festplatte nicht zu verändern.
Koopakiller schrieb am 2/23/2016:
Es auszuprobieren ist eben kein Beweis, sondern zeigt nur das es funktionieren kann. Was wo geschrieben wird kann auch vom Speicher selbst kontrolliert werden, nun ist die Frage ob .NET, Windows oder das Dateisystem wirklich versichert das die Daten überschrieben werden. Oder besteht, besonders bei anderen Dateisystemen oder speziellen Speichercontrollern (Stichwort: SSD), die Gefahr das dem nicht so ist?

Sobald du mir in der Doku oder im Code der FileStream-Klasse zeigst womit das garantiert wird, glaube ich dir. Aber bisher sehe ich nur eine logische, jedoch unbewiesene Aussage.

Alle .NET-Sprachen können mit "Bits und Bytes" umgehen, aber auf einem viel höheren Abstraktions-Level. Erfahrungsgemäß sollte man sich nicht immer sicher sein, das alles 1 zu 1 auf die Hardware oder das Betriebssystem übertragen wird/werden kann.
 

Logge dich ein, um hier zu kommentieren!