Запись в свободное место

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

Другие вопросы по тегам