Sprache: VB
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
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
Alte URL:
/snippet/dateien-sicher-loeschen/14114
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.
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.
Es auszuprobieren ist eben kein Beweis, sondern zeigt nur das es funktionieren [b]kann[/b]. 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.