Запись в свободное место
Мне было интересно, если можно написать в свободном пространстве в C#? Я имею в виду что-то вроде FreeSpace.WriteAllBytes()
или как то, что делают некоторые приложения шредера?
Как я могу это сделать?
3 ответа
Если вы хотите просто перезаписать все свободное место на жестком диске, вы можете использовать GetDiskFreeSpaceEx
API для определения количества доступных байтов и записи файла большого размера (или распределения его между несколькими файлами).
P / Invoke для C#:
[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
ref ulong totalNumBytes, ref ulong totalFreeBytes);
Вы можете использовать такой класс, как System.Random, чтобы заполнить массив байтов случайными значениями перед их записью, если это может вас заинтересовать.
Изменить: не знал о классе System.IO.DriveInfo, который может быть проще, чем использование упомянутого API.
Такая специфическая функциональность не встроена в C#, но вы можете легко написать ее самостоятельно, открыв файл и записав в него байты (0), пока диск не будет заполнен.
Обратите внимание, что некоторые файловые системы ограничивают ваш максимальный размер файла.
Это помогло мне получить свободное место на диске (C#) через System.Management
ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes
Теперь вы можете записывать файлы с именами через System.Guid.NewGuid(), чтобы заполнить все пространство (используйте кратный размер кластера файловой системы).