Domanda
Mi chiedevo se è possibile scrivere a FreeSpace in C #? Voglio dire qualcosa come FreeSpace.WriteAllBytes()
o piace quello che alcune applicazioni trituratore fanno?
Come posso fare così?
Soluzione
Se la vostra intenzione è semplicemente quella di sovrascrivere tutto lo spazio libero disponibile su un disco rigido, è possibile utilizzare il GetDiskFreeSpaceEx
API per determinare quanti byte sono disponibili e scrivere un file che di grandi dimensioni (o stese tra diversi file).
P / Invoke per C #:
[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
ref ulong totalNumBytes, ref ulong totalFreeBytes);
È possibile utilizzare una classe come System.Random di riempire un array di byte con valori casuali prima di scriverle, se che potrebbe interessarti.
Modifica:. non era a conoscenza della classe System.IO.DriveInfo, che potrebbe essere più semplice utilizzando l'API citato
Altri suggerimenti
Questa funzionalità specifiche non è costruito in C #, ma si potrebbe facilmente scrivere voi stessi, aprendo un file e crei byte (0) in essa finché il disco è piena .
prendere atto alcuni file system limiterà i tuoi dimensione massima del file .
Questo ha funzionato per me per ottenere lo spazio libero di un disco (C #), tramite System.Management
ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes
Ora è possibile scrivere file denominati via System.Guid.NewGuid () per riempire tutto lo spazio (utilizzare un multiplo della dimensione dei cluster del file system).