LINQ とファイル ディレクトリ

多くの場合、ファイル システム操作は基本的にクエリであるため、LINQ での使用に適しています。

注意

複数の種類のファイルおよびドキュメントの内容を対象に、プログラムによってクエリを実行する場合は、Windows デスクトップ サーチ エンジンを使用することを検討してください。 現時点では LINQ によるクエリの実行はできませんが、強力なインデックス サービスが提供されるため、ファイル システムの複雑さを効果的に管理できます。

ここで示すクエリは、破壊的ではありません。 元のファイルやフォルダーの内容が変更されることはありません。 これは、クエリは副作用を引き起こすべきではないという規則に従っています。 一般に、参照元データを変更するコード (create、update、または delete の各演算子を実行するクエリなど) は、単にデータを照会するだけのコードとは分離する必要があります。

ここでは、次の項目について説明します。

説明

ファイル システムの内容を正確に表し、例外を適切に処理するデータ ソースを作成する手順は複雑になります。 ここに示す例では、指定したルート フォルダーおよびすべてのサブフォルダーの下にある、すべてのファイルを表す FileInfo オブジェクトのスナップショット コレクションを作成します。 各 FileInfo の実際の状態は、クエリの実行の開始時点から終了時点までの間に変化する可能性があります。 たとえば、データ ソースとして使用する FileInfo オブジェクトのリストを作成したとします。 クエリで Length プロパティにアクセスしようとすると、FileInfo オブジェクトがファイル システムにアクセスして Length の値を更新しようとします。 ファイルがもう存在しない場合は、ファイル システムを直接照会していなくても、クエリから FileNotFoundException が返されます。 ここで示すクエリの中には、状況により、このような特定の例外を処理する個別のメソッドを使用しているものがあります。 別の方法として、FileSystemWatcher を使用して、データ ソースを動的に更新して常に最新の状態に保つこともできます。

参照

概念

LINQ to Objects