物理的な領域に0を書き込んでファイルを完全に削除するファイルシェダーを作成します。ハードドライブ上のファイルの物理的な場所を取得する方法
ファイルはハードドライブに格納されている場合がありますが、必ずしもブロック全体ではありません。
私は物理的な領域を言う。私は、ファイルが格納されている物理的なセクション、または "ゼロの書き込み"を実行できるセクションへの参照を意味します。
C#でよくなる。
物理的な領域に0を書き込んでファイルを完全に削除するファイルシェダーを作成します。ハードドライブ上のファイルの物理的な場所を取得する方法
ファイルはハードドライブに格納されている場合がありますが、必ずしもブロック全体ではありません。
私は物理的な領域を言う。私は、ファイルが格納されている物理的なセクション、または "ゼロの書き込み"を実行できるセクションへの参照を意味します。
C#でよくなる。
残念ながら、カーネルモードドライバを作成していても、それはC#とC/C++では完全にはできません。
から
引用は、適切に位置を完全に知ることができるが、基本的に唯一の理想的な場合には三つの特徴を有するもの理想case.The知ることができる前提
- ファイルサイズが編集のために縮小されたことはありません。 3MBのスプレッドシートから始めて、スプレッドシートアプリケーションを使用して1MBに編集し、クリーナーアプリケーションに1MBのバージョンを削除するように依頼すると、クリーナーは、物理ハードドライブに2MBの容量が割り当てられていない場所を知る方法がありません。 (ファイルシステムはしばしばファイルを連続して保存しないので、不足している部分が既知の部分の直後であったと仮定することはできません)。
- ファイルは決して移動しませんでした。スプレッドシートソフトウェアが、新しいコピーを一時ファイルに書き込んだり、古いコピーを削除したり、一時ファイルを元の名前に名前を変更したりすることで、ドキュメントを保存するとします。この場合、クリーナーアプリケーションは、古いスプレッドシートがどこにあったかを知る方法がありません。
- ファイルシステムは、ファイルを同じ場所に上書きします。これは良い前提です。 Windows NTFSとLinuxでは、最も一般的なext3設定(Ubuntu 9.10や他のLinuxディストリビューションのデフォルト)は同じ場所のファイルを上書きしますが、透過的なディスク圧縮、暗号化、スパースファイルはファイルを上書きできません。さらに
:現代のハードドライブの領域が破損した場合、それは自動的にスペアに不良セクターを再マップします。これらの操作はドライブのファームウェアの裁量で行われ、オペレーティングシステムもアプリケーションも移動を認識していないので、ドライブを拭くと損傷した領域は無視されます。
これは、ドライブのどのセクタが現在ファイルを占有しているのかを把握することは容易ではありませんが、それは可能です()。しかし、これはあなたのアプリケーション(少なくとも部分的に)が使用されるファイルシステムとそのファイルシステムが基礎となる媒体にファイルをどのように格納するかを理解することを必要とします。
最後に、ファイルが占めるすべてのセクタを特定し、それらに0を書き込むただ実行する
using(var fs = new System.IO.FileStream(@"m:\delme.zip",
FileMode.Open,
FileAccess.Write,
FileShare.None))
{
var zeros = new byte[fs.Length];
fs.Write(zeros, 0, zeros.Length);
}
私はあなたがこれを行うことができないと思います。 Thisによれば、これを行うには管理されていないコードしか使用できません。
一般的に、このための.NET APIはありません。おそらく、ディスクからFS構造体を手動で読み込み、ファイル割り付け構造を解析し、interopを使って低レベルのブロックIOに行くことを考えているでしょう。
あなたは、その長さを変更し、何が起こるかを観察することなく、ファイルにゼロを書き込むようにしようとする場合があります。ファイルが再割り当てされない可能性があります。私は本当にそれが事実かどうかわからないし、それはOS、OSのバージョン、FSに依存していると思うし、おそらくSSDとHDDの違いもあるだろう。
また、あなたが細断処理しようとしているファイルは、最近、OSによって再割り当てされた場合を考えます。ファイルによって使用された領域の一部は、現在は「空」とマークされていますが、データはまだそこにあります。これらの領域が実際にディスク全体を「シュレッド」していないことを把握する方法はほとんどありません。
また、私たちの間paranoidsために:ファイルの領域に書き込みをゼロ(またはもの、またはゴミ)古いデータが回復不能になっていることを保証するものではありません。物理ドライブは、トリックを行うかもしれない破壊が、そのためのAPIはありません。)
私はあなたには、いくつかの低レベルを行うために呼び出しを使用する必要があります、あなただけでは.NETでこれを行うことができないかなり確信していますこの。 – Kolky
あなた自身でこれを書いてみたい理由は何ですか?すでに市場でそうしている多くのユーティリティがあります。そしてBTWは、既存のセクタに0を書き込んでもファイルを完全に消去するわけではなく、一部のソフトウェアはまだデータの一部を取り出すことができます。 –
ユーザモードから物理セクタに書き込めない、カーネルモードのドライバが必要 –