0

我想知道是否可以在 C# 中写入可用空间?我的意思是类似于FreeSpace.WriteAllBytes()或类似于某些碎纸机应用程序所做的事情?

我该怎么做?

4

3 回答 3

2

此类特定功能未内置在 C# 中,但您可以轻松地自己编写它,方法是打开文件并将字节 (0) 写入其中,直到磁盘已满

请注意,某些文件系统会限制您的最大文件大小

于 2009-12-29T06:44:44.430 回答
0

如果您的意图只是覆盖硬盘驱动器上的所有可用空间,您可以使用GetDiskFreeSpaceExAPI 来确定可用字节数并写入那么大的文件(或将其分散到多个文件中)。

C#的P/Invoke:

[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
    ref ulong totalNumBytes, ref ulong totalFreeBytes);

如果您可能感兴趣,您可以使用 System.Random 之类的类在写入字节数组之前用随机值填充它们。

编辑:不知道 System.IO.DriveInfo 类,这可能比使用提到的 API 更简单。

于 2009-12-29T08:52:12.500 回答
0

这有助于我通过System.Management获得驱动器的可用空间(C#)

ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes

现在您可以编写通过 System.Guid.NewGuid() 命名的文件来填满所有空间(使用文件系统集群大小的倍数)。

于 2009-12-29T09:41:34.357 回答