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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top