見出し画像

【C#】どう書くんだっけ?『特定のすべてのファイルに対して処理を行う』

どうも lingmu です。
今回は C# で特定のすべてのファイルに対して何かしらの処理をする方法を書きます。例えば、指定したディレクトリ配下にあるテキストファイルのみを抽出して特定の文字列が含まれるか判断したいときなどに使えます。

1. やりたいこと

 今回は、『あるフォルダ配下に存在する全てのテキストファイルを読み込んで画面上に表示すること』を実現したいことと仮定します。

2. どう書くんだっけ?

# プログラム名:FileReader
# あるフォルダ配下に存在する全てのテキストファイルを読み込んで画面上に表示する
# 検索対象パス:C:\work ※サブフォルダも含める
# 検索対象ファイル:*.txt
static void Main(string[] args)
{
   string path = @"C:\work";
   var files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);

   foreach(var file in files)
   {
       // ファイル名を表示する
       Console.WriteLine($"{Path.GetFileName(file)}");

       var lines = File.ReadAllLines(file, Encoding.GetEncoding("sjis"));
       foreach (var line in lines)
       {
           // 読み込んだファイルの行を表示する
           Console.WriteLine(line);
       }
   }
}

 2.1 解説

 実装内容について簡単に解説を書きます。

 (1)Directory.GetFilesメソッドに対象のディレクトリパス(path)とすべてのテキストファイル(*.txt)、サブディレクトリを含むすべてのディレクトリから検索するオプション(SearchOption.AllDirectories)を指定してコールする。

 (2)(1)より抽出されたディレクトリ配下のすべてのテキストファイルのパスを File.ReadAllLines メソッドの入力にファイルの内容を読み込みます。

 (3)(2)で読み込んだファイルの内容を1行毎に画面に表示しています。

3. 動作を確認する

C:\> FileReader.exe
text_file_1-1.txt
a
b
c
text_file_1-2.txt
x
y
z

4. 参考サイト

■Directory.GetFiles メソッド (System.IO) | Microsoft Docs
 https://docs.microsoft.com/ja-jp/dotnet/api/system.io.directory.getfiles?view=net-6.0

■File.ReadAllLines メソッド (System.IO) | Microsoft Docs
 https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.readalllines?view=net-6.0

おわり

 以上です。


この記事が気に入ったらサポートをしてみませんか?