LINQ とファイル ディレクトリ
多くの場合、ファイル システム操作は基本的にクエリであるため、LINQ での使用に適しています。
[!メモ]
複数の種類のファイルおよびドキュメントの内容を対象に、プログラムによってクエリを実行する場合は、Windows デスクトップ サーチ エンジンを使用することを検討してください。現時点では LINQ によるクエリの実行はできませんが、強力なインデックス サービスが提供されるため、ファイル システムの複雑さを効果的に管理できます。
ここで示すクエリは、破壊的ではありません。元のファイルやフォルダーの内容が変更されることはありません。これは、クエリは副作用を引き起こすべきではないという規則に従っています。一般に、参照元データを変更するコード (create、update、または delete の各演算子を実行するクエリなど) は、単にデータを照会するだけのコードとは分離する必要があります。
ここでは、次の項目について説明します。
方法: 指定された属性または名前のファイルを照会する
ファイルの FileInfo オブジェクトで 1 つ以上のプロパティを調べることにより、ファイルを検索する方法について説明します。方法: 拡張子別にファイルをグループ化する (LINQ)
ファイル名の拡張子に基づいて FileInfo オブジェクトのグループを取得する方法について説明します。方法 : 一連のフォルダーの合計バイト数を問い合わせる (LINQ)
指定したディレクトリ ツリー内のすべてのファイルの合計バイト数を取得する方法について説明します。方法 : 2 つのフォルダーの内容を比較する (LINQ)
指定した 2 つのフォルダーに存在するファイルをすべて取得する方法と、一方のフォルダーにのみ存在し、もう一方には存在しないファイルをすべて取得する方法について説明します。方法: ディレクトリ ツリー内で最もサイズの大きいファイルを照会する (LINQ)
ディレクトリ ツリー内で、サイズが最大または最小のファイル、あるいは指定した数のファイルを取得する方法について説明します。方法: ディレクトリ ツリーで重複するファイルを問い合わせる (LINQ)
指定したディレクトリ ツリー内で複数の場所に名前が出現するファイルをすべてグループ化する方法について説明します。カスタム比較子に基づいて、より複雑な比較を実行する方法についても説明します。方法 : フォルダー内のファイルの内容を照会する (LINQ)
ツリー内のフォルダーを反復処理し、各ファイルを開き、ファイルの内容を照会する方法について説明します。
コメント
ファイル システムの内容を正確に表し、例外を適切に処理するデータ ソースを作成する手順は複雑になります。ここに示す例では、指定したルート フォルダーおよびすべてのサブフォルダーの下にある、すべてのファイルを表す FileInfo オブジェクトのスナップショット コレクションを作成します。各 FileInfo の実際の状態は、クエリの実行の開始時点から終了時点までの間に変化する可能性があります。たとえば、データ ソースとして使用する FileInfo オブジェクトのリストを作成したとします。クエリで Length プロパティにアクセスしようとすると、FileInfo オブジェクトがファイル システムにアクセスして Length の値を更新しようとします。ファイルがもう存在しない場合は、ファイル システムを直接照会していなくても、クエリから FileNotFoundException が返されます。ここで示すクエリの中には、状況により、このような特定の例外を処理する個別のメソッドを使用しているものがあります。別の方法として、FileSystemWatcher を使用して、データ ソースを動的に更新して常に最新の状態に保つこともできます。