2009-07-06 5 views
5

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

+2

ディスクの断片化解消は、複雑なトピックで、デフラグしているデバイスの基礎となるファイルシステム固有のものです。あなたは正確に何を達成しようとしていますか? – scwagner

+3

なぜあなたはそれの概念を知らない場合はC#でディスクのデフラグメンテーションを行いますか? –

+0

私はシステムベースのアプリケーションをやっています。私はそれにディスクデフラグとディスクチェッカーを実装したいと思います。 – Sauron

答えて

7

完全性期すために、ここでのデフラグのためのC#のAPIラッパーです:これらのAPIを持つ

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

デフラグは、今日非常に安全(のはず)されます。あなたが望む場合であっても、ファイルシステムを壊すことはできません。

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

+2

違いは、商用企業はファイルシステムについて知っており、OPでは最適化も定義できませんでした。私は彼に銃を与える前にトリガーが何であるかを彼に知らせてほしい。 –

3

Defragmenting Files(可能なAPIヘルパーはmsdn)をご覧ください。

ネイティブWin32へのマーシャリングのために望ましくないオーバーヘッドが発生する可能性があるため、この作業にはC#の使用について慎重に考える必要があります。

3

最適化のロジックがわからない場合や、ファイルシステムを自分で書き込んでいないと正式にエラーをチェックできない場合は、単に 'defrag'と 'chkdsk' '?

1

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

デフラグは、各ファイルに割り当てられたディスクブロックのリストを調べることです。ファイルは、ディスク全体に散らばっているブロックではなく、連続したブロックセットを使用すると、一般的に高速に読み込まれます。また、使用されているすべてのディスクブロックがディスクの単一の込み合う範囲に限定されていると、ファイルシステム全体が最高のパフォーマンスを発揮します。したがって、このトリックは、ファイルシステムを破壊することなく、この目的を達成するためにディスクブロックを安全に動かすことです。

ここでの主な問題は、ディスクの使用中にこれらのアプリケーションを実行することです。それは可能ですが、非常に、非常に非常に注意しなければならないいくつかの種類の明白なまたは非常に微妙なエラーを作成し、ほとんどまたはすべてのファイルを破壊する必要があります。オフラインでファイルシステムを操作する方が簡単です。

もう1つの難点は、ファイルシステムの複雑さを扱うことです。たとえば、NTFSではなく、FAT32をサポートするものを構築する方がずっと簡単です。なぜなら、前者ははるかに単純なファイルシステムだからです。

ローレベルのブロックアクセスと、並行性の問題(ファイルシステムが使用されていないときにファイルシステムを操作することによって最良に処理される)を処理するための合理的な方法があれば、C#、perl、あなたは好きです。

ただし、非常に注意してください。プログラムの初期のバージョンでは、ファイルシステム全体が破壊されます。それ以降のバージョンでは、あいまいな状況の下でしかそうしません。また、データを破壊すると、ユーザーは非常に怒って訴訟を起こします。

+0

フィリップスに感謝、これは私に解決策を与えるかもしれません。 – Sauron

+1

完全に安全で、NTFSファイルシステム上で動作するデフラグ用のWindows APIがあります。 – andreialecu

3

Mark Russinovichは、少し前に記事Inside Windows NT Disk Defragmentationを書きました。本当にこれをやりたいのであれば、組み込み機能を使用してデフラグを行うことをお勧めします。さらに、最近のOSでは、デフラグを気にすることなく、ユーザーとしての必要性を見たことはありません。それはスケジュールで自動的に行われ、MSのNTFSの人々はあなたよりも賢いです(申し訳ありませんが、今はこれをやっていますが、そうはしません)。

+0

この記事は非常に役に立ちます。 – Sauron

関連する問題