Pregunta
Me preguntaba si es posible escribir en espacio libre en C #? Me refiero a algo así como FreeSpace.WriteAllBytes()
o como lo hacen algunas aplicaciones trituradora?
¿Cómo puedo hacer eso?
Solución
Si su intención es simplemente sobrescribir todo el espacio libre disponible en el disco duro, puede utilizar el GetDiskFreeSpaceEx
API para determinar cuántos bytes están disponibles y escribir un archivo que grande (o lo extendió entre varios archivos).
P / Invoke para C #:
[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
ref ulong totalNumBytes, ref ulong totalFreeBytes);
Se puede utilizar una clase como System.Random para llenar una matriz de bytes con valores aleatorios antes de escribirlas, si es que la fuerza de su interés.
Editar:. no estaba al tanto de la clase System.IO.DriveInfo, que podría ser más simple que el uso de la API mencionado
Otros consejos
Esta funcionalidad específica no está integrado en C #, pero se puede escribir fácilmente por sí mismo, mediante la apertura de un archivo y escribir bytes (0) en él hasta que el disco es completa.
Tome nota de algunos sistemas de archivos limitarán su máximo tamaño de archivo .
Esto ha funcionado para mí para obtener el espacio libre de una unidad (C #), a través de System.Management
ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes
Ahora usted puede escribir los ficheros nombrados mediante System.Guid.NewGuid () para llenar todo el espacio (utilizar un múltiplo del tamaño de clúster del sistema de archivos).