質問

のWindowsのディスクデフラグやディスクチェックの背後にあるロジックは何ですか?私はそれがC#のコーディングを使用して行うことができますか?

役に立ちましたか?

解決

完全性期すために、ここでのデフラグのためのC#のAPIのラッパーです。

http://blogs.msdn.com/jeffrey_wall/アーカイブ/ 2004/9月13日/ 229137.aspxする

これらのAPIを使用して

デフラグは非常に安全、今日(のはず)です。あなたが望んだ場合でも、破損したファイルシステムにできないようにする必要があります。

商業デフラグプログラムは、同じAPIを使用します。

他のヒント

デフラグファイルのを見てください可能なAPIヘルパーについては、MSDN。

あなたは慎重にそれがネイティブのWin32にマーシャリングするために、いくつかの望ましくないオーバーヘッドを導入することができるよう、このタスクのためにC#を使用して考える必要があります。

あなたはデフラグのためのロジックがわからない場合、あなた自身があなたが正式エラーのためにそれを確認することができないファイルシステムを作成していなかった場合は、理由だけではなく、「デフラグ」と「CHKDSK」を実行している新しいプロセスを開始?

マークRussinovich氏が記事を書いた内部のWindows NTのディスクデフラグする A綿密で詳細を与える前にしばらく。あなたが本当にこれをしたい場合は、私は本当にあなたがデフラグのための組み込みの機能を使用することをお勧めします。より多くのように、最近のOS上で私もデフラグを気にするユーザーとしての必要性を見たことがありません。それは、スケジュールに基づいて自動的に行われますし、MSでのNTFSの人々は、その原料で間違いなく賢くているよりも、あなた(申し訳ありませんが、彼らは今、いくつかの時間のためにこれを行う、あなたはしないでください)。

は、その重要性にもかかわらず、ファイルシステムは、ディスクブロックのリストにファイル名をマップするデータ構造に過ぎません。そして、そのようなファイルやファイル(例えば、ディレクトリ)のリストを保つ特殊ファイルの実際の長さなどのメタ情報を追跡します。ディスクチェッカーは、データ構造が一貫していることを検証します。つまり、すべてのディスクブロックは、ファイルへの割り当てのために自由であるか、または単一のファイルに属している必要があります。また、ディスクブロックのセットがディレクトリにあるべきファイルのように見えるが、何らかの理由ではなく、特定のケースを確認することができます。

デフラグは、各ファイルに割り当てられたディスクブロックのリストを見てについてです。彼らはむしろ、すべてのディスクの上に散らばったものよりも、ブロックの連続セットを使用する場合、ファイルは、一般的に速くロードされます。使用中のすべてのディスクブロックがディスクの単一congtiguous範囲に自分自身を閉じ込める場合、一般的に、ファイルシステム全体が最適実行されます。したがって、トリックは、ファイルシステムを破壊しないが、この目的を達成するために安全に周りのディスクブロックを移動されます。

ディスクの使用中に

ここでの大きな問題は、これらのアプリケーションを実行しています。それは可能ですが、1つは明白または非常に微妙な誤差のいくつかの種類を作成し、ファイルのほとんどまたは全てを破壊しないように非常に、非常に、非常に慎重にする必要があります。ファイルシステムをオフラインで作業する方が簡単です。

他の難しさは、ファイルシステムの複雑さを扱っています。たとえば、前者は非常に、非常にシンプルなファイルシステムであるため、むしろNTFS以外FAT32をサポートして何かを構築するオフはるかに良いと思います。

限り、あなたは低レベルのブロックアクセスおよび並行性の問題に対処するためのいくつかの賢明な方法を持っているように(最高のそれを使用していないときに、ファイルシステムに取り組んで扱う)あなたは、C#、Perlや任意の言語あなたの中にこれを行うことができます同様ます。

が、非常に注意する必要があります。プログラムのの初期のバージョンでは、ファイルシステム全体を破壊します。以降のバージョンではなく、唯一のあいまいな状況下ではそうだろう。あなたはそれらのデータを破壊した場合、ユーザーは非常に怒っていると訴訟入手ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top