Вопрос
Мне было интересно, можно ли писать в свободное пространство на C#?Я имею в виду что-то вроде FreeSpace.WriteAllBytes()
или как то, что делают некоторые приложения для измельчения?
Как я могу это сделать?
Решение
Если вы намерены просто перезаписать все свободное пространство, доступное на жестком диске, вы можете использовать команду GetDiskFreeSpaceEx
API, чтобы определить, сколько байт доступно, и записать файл такого размера (или распределить его по нескольким файлам).
P/Вызов для 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), пока диск заполнен.
Обратите внимание, что некоторые файловые системы ограничивают вашу максимальный размер файла.
Мне помогло получить свободное место на диске (С#) через Управление системой
ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes
Теперь вы можете записывать файлы, названные через System.Guid.NewGuid(), чтобы заполнить все пространство (используйте размер, кратный размеру кластера файловой системы).