編集

【C#.NET解説】弓の神「File」クラスを徹底解説 ファイル操作の基本から注意点とFileStreamとの違い

2024/12/01

名前空間 System.IO

自己紹介

こんにちは、人間たち。私は弓の神であり、狩猟と戦を司る者、「File」クラスと申します。私の役割は遠くの的を正確に射抜くように、ファイル操作を正確にこなします。では使い方を解説していきましょう。狩りと同じく、正確さが鍵になりますよ。

基本機能

Fileクラスは、ファイルの作成、読み書き、削除、コピーなど、さまざまな操作を簡潔に行える便利なクラスです。まずは基本的なファイル作成と読み取りの例を見てみましょう。

C#

// Fileクラスを使った基本操作
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        // ファイルを作成して書き込み
        File.WriteAllText(filePath, "これはサンプルテキストです。");

        // ファイルを読み取り
        string content = File.ReadAllText(filePath);
        Console.WriteLine($"ファイル内容: {content}"); // 出力: ファイル内容: これはサンプルテキストです。
    }
}

この例では、WriteAllTextReadAllTextを使ってファイルの書き込みと読み取りを行っています。Fileクラスを使うことで、これらの操作を簡潔に実現できます。

注意点

ファイル操作ではリソースの解放に注意が必要です。Fileクラスは内部でリソースを管理していますが、FileStreamStreamWriterを直接使用する場合はusingブロックを活用してリソースを明示的に解放する必要があります。以下はCloseを忘れた場合の例です。

C#

// Closeを忘れた場合の例
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";

        FileStream stream = new FileStream(filePath, FileMode.Create);
        StreamWriter writer = new StreamWriter(stream);

        writer.WriteLine("リソース解放を忘れた例です。");
        // writer.Close() を忘れると、ファイルがロックされたままになる可能性があります。

        try
        {
            File.Delete(filePath);
        }
        catch (IOException ex)
        {
            Console.WriteLine($"エラー: {ex.Message}");
        }
    }
}

usingを使うことで、リソースが自動的に解放されます。忘れないように注意しましょう。

FileStreamとの違い

Fileクラスは静的メソッドを提供するシンプルなインターフェースで、短い操作に向いています。一方、FileStreamはストリームとして動作するため、ファイルを細かく制御する際に適しています。以下に違いを示す例を挙げます。

C#

// FileStreamを使ったファイル書き込み
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "filestream_example.txt";

        using (FileStream fs = new FileStream(filePath, FileMode.Create))
        using (StreamWriter writer = new StreamWriter(fs))
        {
            writer.WriteLine("FileStreamを使った書き込み例です。");
        }

        string content = File.ReadAllText(filePath);
        Console.WriteLine($"ファイル内容: {content}");
    }
}

このように、FileクラスとFileStreamの使い分けが重要です。

具体的な使い方

以下はFileクラスを使った存在確認、書き込み、コピーの例です。

C#

// Fileクラスを使ったさまざまな操作
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.txt";
        string copyPath = "example_copy.txt";

        // 存在確認
        if (File.Exists(filePath))
        {
            Console.WriteLine($"{filePath} は存在します。");
        }
        else
        {
            // ファイルがなければ作成
            File.WriteAllText(filePath, "ファイルの内容を書き込みます。");
        }

        // ファイルをコピー
        File.Copy(filePath, copyPath, true);

        Console.WriteLine($"{filePath} を {copyPath} にコピーしました。");
    }
}

これで、Fileクラスを使った基本的な操作がマスターできます。

解説

上記の例では、Fileクラスの多様な機能を活用しました。Existsでファイルの存在を確認し、WriteAllTextで内容を書き込み、Copyでファイルをコピーしています。Fileクラスは簡潔で扱いやすい一方、細かい制御が必要な場合はFileStreamを選ぶと良いでしょう。用途に応じて使い分けることで、効率的なファイル操作が可能です。