カテゴリ: C# 更新日: 2025/11/16

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#でタイムスタンプの精度を上げるためのテクニックを徹底解説!(初心者向け)
C#のコーディング規約(C# Coding Conventions)とは?読みやすいコードを書くための基本ルール
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
COBOL資産のバージョン管理とは?初心者でもわかる保守と管理の基本
人気記事
No.1
Java&Spring記事人気No1
COBOLで学ぶSELECT文のORDER BY・GROUP BY活用法!初心者でもわかるデータ集計
No.2
Java&Spring記事人気No2
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.4
Java&Spring記事人気No4
COBOLで学ぶカーソル操作と複数行データ取得の基本
No.5
Java&Spring記事人気No5
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.7
Java&Spring記事人気No7
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.8
Java&Spring記事人気No8
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド