Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 202
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Freien Laufwerk-Speicherplatz überschreiben


Autor: Hardt
Sprache: VB.NET
Bewertung:
1.31 (3 votes)
Anzahl der Aufrufe: 7531
  
Kick it on dotnet-kicks.de  

Beschreibung:

Mit einem kleinen Trick kann man den freien Speicherplatz auf einem NTFS-Volume
löschen bzw. überschreiben. Es werden permanet Daten in eine temp. Datei
geschrieben bis kein Speicherplatz mehr zur Verfügung steht. Anschließend wird diese Datei wieder gelöscht.


Abgelegt unter: Laufwerk, Volume, NTFS.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Imports System.IO

Private Sub ClearUnusedVolumeSpace(ByVal driveletter As String)
   ' Standard-Clustergrösse 4 KB 
   Dim Data(4095) As Byte
   Dim Stream As FileStream
   Dim TempFile As String = driveletter.Substring(0, 1) & ":\" & "FreeSpace.tmp"

   Try
      ' Temp. Datei erstellen
      Stream = New FileStream(TempFile, FileMode.Create, FileAccess.Write, FileShare.None)
      ' Enllosschleife, wird nur verlassen wenn kein Speicherplatz
      ' mehr zur Verfügung steht.
      Do
         Stream.Write(Data, 0, 4096)
      Loop
   Catch
      '
   Finally
      If Not Stream Is Nothing Then
         Stream.Close()
         ' Temp. Datei löschen - Fertig
         File.Delete(TempFile)
      End If
   End Try

End Sub

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Tim Hartwig schrieb am:  05.08.2007 18:18:41

Äußerst ineffizienter Code, du willst in einer Schleife den Restspeicherplatz der HDD mit leeren Daten füllen die dann auch noch eine Blockgröße von mickrigen 4 KB haben. Dann verlässt du die DO Schleife mit der annahme das wenn nicht mehr geschrieben werden kann ein Fehler ausgelöst wird und somit die Schleife abgebrochen wird. Ich hab schon viel Schrott gesehn aber das übertrifft alles. Und wenn du es doch machen willst dann reicht der Code hier (geht vor allem deutlich schneller, nämlich sofort):

Dim FS As New IO.FileStream("C:\Temp.dat", IO.FileMode.CreateNew)
FS.SetLength(Restspeicherplatz)
FS.Close()
Volker Steitz schrieb am:  05.08.2007 21:50:38

Da muss ich khartak recht geben. Der Tipp fällt noch dazu in die rubrik "Wie mache ich aus einem schnellen System ein langsames".

Viele Anwendungen benötigen "continous diskspace" also zusammenhängenden Speicher. der Tipp würde dazu führen, dass genau das Gegenteil eintritt.
Hardt schrieb am:  06.08.2007 16:13:41

Sicherlich habe ich grundsätzlich nichts gegen sachliche Kritik.
Aber sieht so Kritik aus ????
Wenn man etwas so böswillig kritisiert, dann sollte man zumindest auch den
"besseren Weg zum Ziel" darstellen. Dieses Verhalten kann ich bei "Khartak" nicht erkennen.
Meine vorgestellte Methode soll j e d e n freien Sektor/Cluster mit Daten überschreiben !
Dieses Ziel sollte mit den vorhandenen NET-Bordmitteln gelöst werden. Dabei ging es
mir nicht darum "hochoptimierten" Code zu erstellen.

Der Code von "Khartak", der aus drei Zeilen besteht, bewirkt absolut überhaupt nichts !!!!!!!!!!!!!!!!
Es wird nur eine Datei mit max. Grösse erstellt. Dabei wird nicht ein einziges Byte in diese Datei geschrieben sondern es werden n u r die Cluster vom BS als belegt gekennzeichnet.

Da kann ich selber "Khartak" nur zitieren - "Der 3-Zeiler-Schrott übertrifft alles, was ich bisher
gesehen habe."
Tim Hartwig schrieb am:  06.08.2007 18:17:24

In deinem Byte Array liegen aber auch keine Daten drin sondern nur 0-Werte. Das bewirkt das selbe wie meine Funktion. Es erstellt eine große Datei komplett aus Nullen bestehend. Wo ist da der Unterschied?
Tim Hartwig schrieb am:  06.08.2007 18:26:49

Noch was, wenn dann überschreibt man den freien Speicherplatz mit Zufallsdaten und nicht mit 0-Werten denn das bringt nicht viel.
Hardt schrieb am:  06.08.2007 23:29:11

Hallo "Khartak",

es ist scheinbar ein echtes Problem für Dich eine falsche Behauptung zu korrigieren. Leider bedauerlich, aber wohl auch nicht zu ändern.

Hier die Original-Microsoft Dokumentation zur FileStream.SetLength-Methode :
Wenn der Stream erweitert wird, ist der I n h a l t des Streams zwischen der alten und der neuen Länge u n d e f i n i e r t. (Dein Code ist somit absolut unbrauchbar.)

Der Microsoft Dokumentation ist eigentlich nichts mehr hinzuzufügen.

Happy Coding !!!
Tim Hartwig schrieb am:  06.08.2007 23:55:30

Naja ich will mich nicht weiter streiten. Ich seh das nunmal so das der Stream ein Stream ist und wenn er auf die Festplatte geschrieben wird bewirkt das das selbe wie dein Code. Wenn der Stream abgeschlossen ist, haben wir beide eine Datei mit lauter 0-Werten. Dein Code und mein Code bewirken im Endeffekt das selbe. Und sorry das ich dich so blöd angemacht bzw. kritisiert habe. Ich nehms zurück.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.