カテゴリ: C# 更新日: 2025/12/25

C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!

C#で複数ファイルをまとめて操作する方法(foreach・LINQ)
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)

先生と生徒の会話形式で理解しよう

生徒

「先生、フォルダの中にあるたくさんのファイルをまとめて操作したいんですが、どうしたらいいですか?」

先生

「良い質問ですね。C#では、foreach文やLINQを使うことで、複数のファイルを一括で操作できます。」

生徒

「foreachやLINQって何ですか?」

先生

「foreachは『繰り返し処理』を簡単に書くための文法で、LINQはデータを検索したり絞り込んだりする便利な機能です。では、具体的に見てみましょう!」

1. C#で複数ファイルを操作する基本:Directory.GetFiles

1. C#で複数ファイルを操作する基本:Directory.GetFiles
1. C#で複数ファイルを操作する基本:Directory.GetFiles

まず、複数のファイルを操作するには、対象のファイルをまとめて取得する必要があります。C#では、Directory.GetFiles()メソッドを使って、フォルダ内のファイルを一覧で取得することができます。

このメソッドは、指定したフォルダのパスを引数に渡すと、その中のファイルパスを文字列配列として返してくれます。


string folderPath = @"C:\test"; 
string[] files = Directory.GetFiles(folderPath);

foreach (string file in files)
{
    Console.WriteLine(file);
}

上記のコードでは、C:\testフォルダ内のすべてのファイルのパスを取得し、foreach文で1つずつ出力しています。


C:\test\sample1.txt
C:\test\sample2.txt
C:\test\image1.png

このように、フォルダ内のすべてのファイル名をまとめて処理することができます。

2. foreach文でファイルをまとめて処理する

2. foreach文でファイルをまとめて処理する
2. foreach文でファイルをまとめて処理する

ファイルの一覧が取得できたら、foreach文を使って、ファイルごとに何らかの操作を行うことができます。たとえば、テキストファイルをすべて読み込んで中身を出力する場合は、次のように書きます。


string folderPath = @"C:\test";
string[] files = Directory.GetFiles(folderPath, "*.txt");

foreach (string file in files)
{
    string content = File.ReadAllText(file);
    Console.WriteLine($"{Path.GetFileName(file)} の内容:");
    Console.WriteLine(content);
    Console.WriteLine("--------------------");
}

Directory.GetFiles()の第2引数に「*.txt」を指定すると、拡張子が「.txt」のファイルだけを取得できます。つまり、テキストファイルのみをまとめて処理することができるわけです。

3. LINQを使ってファイルを効率的に絞り込む

3. LINQを使ってファイルを効率的に絞り込む
3. LINQを使ってファイルを効率的に絞り込む

もし「特定のキーワードを含むファイルだけを操作したい」といった場合は、C#の強力な機能であるLINQ(Language Integrated Query)を使うと便利です。

LINQは、データを条件でフィルタリングしたり、ソートしたりできる構文です。SQL(データベース言語)に似ていますが、C#の中でそのまま使えるのが特徴です。


using System.Linq;

string folderPath = @"C:\test";
var files = Directory.GetFiles(folderPath, "*.txt");

// 「report」という単語を含むファイルだけ抽出
var reportFiles = files.Where(f => Path.GetFileName(f).Contains("report"));

foreach (var file in reportFiles)
{
    Console.WriteLine($"対象ファイル: {Path.GetFileName(file)}");
}

この例では、ファイル名に「report」という文字が含まれるファイルだけを抽出しています。LINQのWhere()を使うことで、条件に合うファイルを簡単に絞り込むことができます。

4. LINQでファイルサイズや更新日時を並べ替える

4. LINQでファイルサイズや更新日時を並べ替える
4. LINQでファイルサイズや更新日時を並べ替える

さらにLINQを使えば、ファイルの情報(サイズや更新日時など)を取得して並べ替えることもできます。例えば、「ファイルサイズが大きい順」にソートする場合は次のように書きます。


using System.IO;
using System.Linq;

string folderPath = @"C:\test";
var files = Directory.GetFiles(folderPath);

// FileInfoを使ってファイル情報を取得し、サイズ順にソート
var sortedFiles = files
    .Select(f => new FileInfo(f))
    .OrderByDescending(f => f.Length);

foreach (var file in sortedFiles)
{
    Console.WriteLine($"{file.Name} : {file.Length} バイト");
}

FileInfoクラスは、ファイルのサイズ(Length)、作成日時、更新日時などを取得できる便利なクラスです。LINQと組み合わせることで、「最近更新されたファイルを上位に表示する」といった処理も簡単にできます。

5. 複数ファイルの一括コピー・削除・移動も可能

5. 複数ファイルの一括コピー・削除・移動も可能
5. 複数ファイルの一括コピー・削除・移動も可能

複数ファイルを一括で操作する方法として、コピー・移動・削除なども簡単に行えます。例えば、特定のフォルダ内のすべてのテキストファイルを別のフォルダにコピーする場合は、次のように書きます。


string sourcePath = @"C:\test";
string destinationPath = @"C:\backup";

string[] files = Directory.GetFiles(sourcePath, "*.txt");

foreach (string file in files)
{
    string fileName = Path.GetFileName(file);
    string destFile = Path.Combine(destinationPath, fileName);
    File.Copy(file, destFile, overwrite: true);
    Console.WriteLine($"{fileName} をコピーしました。");
}

File.Copy()を使うと、複数のファイルをまとめてコピーできます。削除する場合はFile.Delete()、移動する場合はFile.Move()を使えばOKです。

6. foreachとLINQを組み合わせてスマートに操作する

6. foreachとLINQを組み合わせてスマートに操作する
6. foreachとLINQを組み合わせてスマートに操作する

実際の開発では、foreachLINQを組み合わせて使うことで、より読みやすく効率的なコードを書くことができます。


var largeTxtFiles = Directory
    .GetFiles(@"C:\test", "*.txt")
    .Select(f => new FileInfo(f))
    .Where(f => f.Length > 1000); // サイズが1000バイト以上のファイル

foreach (var file in largeTxtFiles)
{
    Console.WriteLine($"{file.Name} は大きなファイルです。");
}

このように、LINQで条件を絞り込み、foreachで処理を行うという流れが基本パターンです。C#のファイル操作では、この組み合わせが非常に強力で、現場でもよく使われます。

(本文文字数:2824文字)

まとめ

まとめ
まとめ

この記事では、C#で複数ファイルをまとめて操作するための基本から応用までを順を追って整理しながら理解しました。とくに、複数ファイルの取得方法として重要なDirectory.GetFilesのしくみ、繰り返し処理を効率化するforeach文、そして柔軟な条件検索や絞り込みを可能にするLINQの基本構造など、実務でも役立つ内容が多く含まれていました。複数ファイルを一括で扱うときには、ファイル名の判定、拡張子フィルタ、ファイルサイズの並べ替え、更新日時の比較などが頻繁に利用され、LINQはそうした操作を自然な書き方で実現できる力強い機能です。 また、テキストファイルの読み込み、ファイルを別のフォルダへコピーする処理、まとめて削除したり移動したりする操作など、実際の作業にもよく登場する処理の流れを一歩ずつ確認することで、C#のファイル操作がより明確に理解できたはずです。ファイルを抽出して絞り込み、目的に応じて整理し、繰り返し処理で必要な処理を実行するという構造は、多くのプロジェクトで共通して求められる考え方でもあります。 とくにLINQのWhereやOrderByDescending、FileInfoを用いた属性取得などは、ファイルの数が多くなるほど威力を発揮し、効率よく情報を処理できます。ファイル名に特定の単語が含まれるものだけを選んだり、サイズの大きい順に並べたり、更新日が新しいファイルから順に並び替えたりと、さまざまな場面で応用できます。こうした特徴を踏まえ、複数ファイルの操作にはLINQとforeachを組み合わせるパターンが非常にわかりやすく便利であることがわかりました。 以下に、まとめとしてサンプルプログラムを掲載し、これまで学んだ考え方をふりかえります。

サンプルプログラム:サイズが大きいテキストファイルだけを処理する例


using System.IO;
using System.Linq;

string folderPath = @"C:\test";

// テキストファイルから大きめのファイルを抽出
var resultFiles = Directory
    .GetFiles(folderPath, "*.txt")
    .Select(f => new FileInfo(f))
    .Where(f => f.Length > 2000)
    .OrderByDescending(f => f.Length);

foreach (var file in resultFiles)
{
    Console.WriteLine($"{file.Name} : {file.Length} バイト");
}

このサンプルでは、Directory.GetFilesでフォルダ内のテキストファイルを取得し、FileInfoでサイズ情報を扱い、Whereで条件を絞り込み、OrderByDescendingでファイルサイズ順に並べ替えるという、一連の流れをコンパクトにまとめています。複数のファイルを効率的に扱ううえで、LINQとforeachがとても便利であることが再確認できます。C#でファイル処理を行う場合、この基本形を理解しておけば、応用的な処理にも柔軟に対応できるでしょう。

先生と生徒の振り返り会話

生徒

「先生、今日のまとめで、LINQとforeachを組み合わせるとファイル操作がすごくやりやすくなることがわかりました!」

先生

「そうですね。まずDirectory.GetFilesで対象を集め、それをLINQで絞ってforeachで処理するという流れは、とても実用的な書き方です。」

生徒

「ファイル名で選んだり、サイズで並べ替えたり、条件を柔軟に変えられるのも便利ですね。」

先生

「その通りです。必要な情報を素早く取り出せるので、フォルダの管理やログファイル処理などでも大いに活躍しますよ。」

生徒

「複雑そうに見えましたが、やってみると意外とシンプルなんですね。もっと練習して使いこなせるようになりたいです!」

先生

「基本をしっかり押さえれば応用はすぐできます。次はファイルの読み書きとデータ加工を組み合わせた処理にも挑戦してみましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法