Pergunta

Eu queria saber se é possível escrever para o Freespace em C#? Quero dizer algo como FreeSpace.WriteAllBytes() Ou como o que alguns aplicativos de triturador fazem?

Como posso fazer isso?

Foi útil?

Solução

Se sua intenção é simplesmente substituir todo o espaço livre disponível em um disco rígido, você pode usar o GetDiskFreeSpaceEx API para determinar quantos bytes estão disponíveis e escreva um arquivo grande (ou espalhe -o entre vários arquivos).

P/Invoke para C#:

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

Você pode usar uma classe como o System.Random para preencher uma matriz de bytes com valores aleatórios antes de escrevê -los, se isso pode lhe interessar.

Editar: Não estava ciente da classe System.io.DriveInfo, que poderia ser mais simples do que usar a API mencionada.

Outras dicas

Essa funcionalidade específica não é incorporada em C#, mas você pode escrevê -la facilmente, abrindo um arquivo e escrevendo bytes (0) até ele até que o O disco está cheio.

Tome nota alguns sistemas de arquivos limitarão o seu Tamanho máximo do arquivo.

Isso funcionou para eu obter o espaço livre de uma unidade (C#), via Administração de sistema

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

Agora você pode gravar arquivos nomeados via System.guid.newguid () para preencher todo o espaço (use um múltiplo do tamanho do cluster do sistema de arquivos).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top