Das Schreiben an den freien Raum
Frage
Ich frage mich, ob es möglich ist, auf freien Speicherplatz in C # zu schreiben? Ich meine so etwas wie FreeSpace.WriteAllBytes()
oder wie das, was einige Shredder-Anwendungen tun?
Wie kann ich das tun?
Lösung
Wenn Ihre Absicht ist einfach alle den freien Speicherplatz auf einer Festplatte zur Verfügung zu überschreiben, können Sie die GetDiskFreeSpaceEx
API, wie viele Bytes zur Verfügung stehen, um zu bestimmen und eine Datei, die große (oder auf mehrere Dateien ausgebreitet).
P / Invoke für C #:
[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
ref ulong totalNumBytes, ref ulong totalFreeBytes);
Sie können eine Klasse wie System.Random verwenden, um ein Array von Bytes mit zufälligen Werten zu füllen, bevor sie, wenn das könnten Sie interessieren zu schreiben.
Edit:. War der System.IO.DriveInfo Klasse nicht bewusst, die einfacher ist als mit der genannten API könnte
Andere Tipps
Eine solche spezifische Funktionalität ist nicht in C # gebaut, aber man konnte es leicht selbst schreiben, indem eine Datei und Schreiben von Bytes Öffnung (0) hinein, bis die Platte ist voll .
Beachten Sie einige Dateisysteme maximale Dateigröße begrenzen.
Das hat für mich gearbeitet den freien Speicherplatz eines Laufwerks (C #) zu bekommen, über System.Management
ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes
Jetzt können Sie Dateien über System.Guid.NewGuid () mit dem Namen schreiben den ganzen Raum zu füllen (ein Vielfaches der Clustergröße Dateisystem verwenden).