ファイルのアップロード制限チェックや、ログファイルの肥大化監視など、プログラム内でファイルの物理的なサイズ(バイト数)を取得したい場面は頻繁にあります。
C#でファイルサイズを取得するには、System.IO.FileInfo クラスの Length プロパティを使用するのが最も標準的で効率的な方法です。
ファイルサイズ取得の実装
以下のサンプルコードでは、サーバーのログファイルを想定し、そのファイルサイズを「バイト単位」で取得した後、「キロバイト(KB)」や「メガバイト(MB)」などの読みやすい単位に計算して表示する処理を実装しています。
サンプルコード
using System;
using System.IO;
public class Program
{
public static void Main()
{
// サイズを確認したいファイルのパス
string targetFile = "server_app.log";
// 1. テスト用にダミーファイルを作成(適当なテキストを書き込んで容量を持たせる)
if (!File.Exists(targetFile))
{
using (StreamWriter sw = File.CreateText(targetFile))
{
// 約2KB分のデータを書き込むループ
for (int i = 0; i < 50; i++)
{
sw.WriteLine($"[2025-12-26 12:00:{i:00}] Processing request ID:{i * 100} - Status OK");
}
}
}
// 2. FileInfoクラスのインスタンスを生成
// コンストラクタにパスを渡します
FileInfo fileInfo = new FileInfo(targetFile);
// ファイルが存在するか確認
if (fileInfo.Exists)
{
// 3. Lengthプロパティでサイズを取得 (単位はバイト)
long bytes = fileInfo.Length;
Console.WriteLine($"ファイル名 : {fileInfo.Name}");
Console.WriteLine($"基本サイズ : {bytes:#,0} bytes");
// 4. 実用的な単位(KB, MB)に変換
// 一般的に 1KB = 1024 Bytes として計算します
double kilobytes = bytes / 1024.0;
double megabytes = kilobytes / 1024.0;
// 小数点第2位まで表示
Console.WriteLine($"サイズ(KB) : {kilobytes:F2} KB");
Console.WriteLine($"サイズ(MB) : {megabytes:F4} MB");
}
else
{
Console.WriteLine("エラー: 指定されたファイルが見つかりません。");
}
}
}
実行結果
ファイル名 : server_app.log
基本サイズ : 3,250 bytes
サイズ(KB) : 3.17 KB
サイズ(MB) : 0.0031 MB
解説と技術的なポイント
1. FileInfo.Length プロパティ
ファイルサイズは long 型(64ビット整数)で返されます。単位は常に バイト (Byte) です。 このプロパティにアクセスした瞬間、OSのファイルシステムからメタデータが読み取られます。ファイルの中身をすべて読み込むわけではないため、巨大な動画ファイル(数GBなど)であっても一瞬でサイズを取得でき、メモリを圧迫しません。
2. ファイルの存在確認
FileInfo インスタンスを作成しただけでは、ファイルが存在しなくてもエラーになりません。しかし、存在しないファイルに対して .Length を参照しようとすると FileNotFoundException が発生します。 そのため、必ず if (fileInfo.Exists) で存在確認を行うか、例外処理を入れるようにしてください。
3. 注意点:全読み込みは避ける
初心者の方がやってしまいがちな非効率な方法として、「一度ファイルを読み込んで配列の長さを測る」というものがあります。
// 【非推奨】 メモリを大量に消費し、動作も遅い
long size = File.ReadAllBytes("large_movie.mp4").Length;
これはファイルの内容をすべてメモリ上に展開してしまうため、大きなファイルを扱うとプログラムがクラッシュする原因になります。必ず FileInfo を使用してください。
