C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でファイルを検索する方法|DirectoryInfoとFileInfoを使った実装例

特定のディレクトリ内に存在するファイルの一覧を取得し、そこから目的のファイルを検索したいケースは、C#の開発現場でよくあります。本記事では、System.IO名前空間に含まれるDirectoryInfoクラスとFileInfoクラスを使用して、指定したフォルダ内のファイル名とサイズを取得・表示する方法を解説します。

サンプルコード

まずは、ディレクトリ内のファイル一覧を取得して表示する基本的なコードを見てみましょう。以下のコードをそのまま実行することで、ファイルの検索と情報表示が行えます。

using System;
using System.IO;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            // DirectoryInfoオブジェクトを作成
            DirectoryInfo mydir = new DirectoryInfo(@"d:\amit");

            // ディレクトリ内のファイルと、その名前・サイズを取得
            FileInfo[] f = mydir.GetFiles();

            foreach (FileInfo file in f) {
                Console.WriteLine("File Name: {0} Size: {1}", file.Name, file.Length);
            }
            Console.ReadKey();
        }
    }
}

コードの解説

1. 対象となるディレクトリを指定する

最初に、検索対象となるフォルダのパスを指定してDirectoryInfoオブジェクトを生成します。パスの先頭に付いている「@」は、エスケープシーケンス(\記号の二重記述)を不要にするための逐語的文字列リテラルです。

DirectoryInfo mydir = new DirectoryInfo(@"d:\amit");

2. ファイルの一覧を読み取る

次に、GetFiles()メソッドを呼び出すことで、ディレクトリ内のすべてのファイルをFileInfo配列として取得します。あとはforeachループで各ファイルを順番に処理し、Nameプロパティでファイル名を、Lengthプロパティでバイト単位のサイズを取り出してコンソールに出力します。

FileInfo[] f = mydir.GetFiles();

foreach (FileInfo file in f) {
    Console.WriteLine("File Name: {0} Size: {1}", file.Name, file.Length);
}

実行結果

上記のコードを実行すると、指定したディレクトリ内のファイル名とサイズが以下のように表示されます。

File Name: Info.txt  Size: 2kb
File Name: New.html  Size: 10kb

応用ポイント

  • 拡張子で絞り込みたい場合:mydir.GetFiles("*.txt")のように検索パターンを渡すことで、特定の種類のファイルだけを取得できます。
  • サブフォルダも含めて検索したい場合:.NET Framework 4以降では、mydir.GetFiles("*.*", SearchOption.AllDirectories)と指定することで、配下のサブディレクトリまで再帰的に検索できます。
  • 存在確認を行いたい場合:処理前にmydir.Existsをチェックしておくと、フォルダが存在しない場合の例外(DirectoryNotFoundException)を回避できます。

このように、DirectoryInfoFileInfoを組み合わせれば、数行のコードで効率的にファイル検索を実装できます。ログファイルの収集や画像ファイルの一括処理など、さまざまな場面で活用できるので、ぜひ実際のプロジェクトでも試してみてください。

  1. Pythonのbase64モジュールを使ったデータエンコード・デコード入門

    PythonにおけるBase64エンコーディングとはPython標準ライブラリのbase64モジュールは、バイナリデータをプレーンテキスト(ASCII)プロトコルで安全に送信できる形式へ変換するための機能を提供します。メール送信、URLへの埋め込み、HTTP POSTリクエストなど、テキストベースの通信経路でバイナリデータを扱いたい場面で活躍するモジュールです。このモジュールが実装しているのは、RFC 3548で定義されたBase16、Base32、Base64の各アルゴリズム、および事実上の標準となっているAscii85とBase85のエンコーディングです。RFC 3548準拠のエンコーディ

  2. Pythonで作るWebサイトブロッカー ― 業務時間中にSNSへのアクセスを自動遮断する方法

    大手IT企業で働いたことがある方なら、FacebookやYouTube、InstagramといったSNS系のWebサイトが社内からアクセスできないよう制限されていることに気づいた経験があるかもしれません。こうした制限は、サードパーティ製アプリに頼らなくても実現できます。自分専用のオリジナルツールを作れば、好きなWebサイトを自由にブロックできるのです。しかもPythonでWebサイトブロッカーを開発するのは、それほど難しいことではありません。この記事では、指定したWebサイトをブロックするPythonスクリプトの作り方を解説します。前提条件Python 3.x がインストールされていることPy