Вопрос

Мне было интересно, можно ли писать в свободное пространство на 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(), чтобы заполнить все пространство (используйте размер, кратный размеру кластера файловой системы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top