C#におけるストリーム操作とファイル入出力

ストリームの基本概念

ストリームはデータの入出力操作を抽象化した概念で、特に大容量データを扱う際にメモリ効率を向上させるために使用されます。.NET FrameworkではSystem.IO名前空間に各種ストリームクラスが提供されています。

主要なストリームクラス

  • FileStream - ファイル操作用
  • MemoryStream - メモリ操作用
  • NetworkStream - ネットワーク通信用

Streamクラスの基本機能

public abstract class Stream
{
    public abstract bool CanRead { get; }
    public abstract bool CanSeek { get; }
    public abstract bool CanWrite { get; }
    public abstract long Length { get; }
    public abstract long Position { get; set; }
    
    public abstract void Flush();
    public abstract int Read(byte[] buffer, int offset, int count);
    public abstract long Seek(long offset, SeekOrigin origin);
    public abstract void Write(byte[] buffer, int offset, int count);
}

FileStreamの実践的使用例

using System;
using System.IO;
using System.Text;

class FileStreamExample
{
    static void Main()
    {
        // ファイル書き込み例
        using (var fs = new FileStream("sample.txt", FileMode.Create))
        {
            string content = "サンプルテキスト";
            byte[] data = Encoding.UTF8.GetBytes(content);
            fs.Write(data, 0, data.Length);
        }

        // ファイル読み込み例
        using (var fs = new FileStream("sample.txt", FileMode.Open))
        {
            byte[] buffer = new byte[1024];
            int bytesRead = fs.Read(buffer, 0, buffer.Length);
            string result = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine(result);
        }
    }
}

FileクラスとFileInfoクラスの比較

比較項目FileクラスFileInfoクラス
タイプ静的クラスインスタンスクラス
使用シーン単発操作複数回操作
パフォーマンス毎回セキュリティチェック初期化時1回のみ

Fileクラスの基本操作

// ファイル作成と書き込み
File.WriteAllText("output.txt", "サンプルコンテンツ");

// ファイル読み込み
string content = File.ReadAllText("output.txt");

FileInfoクラスの基本操作

var fileInfo = new FileInfo("data.txt");
using (var writer = fileInfo.CreateText())
{
    writer.WriteLine("データを書き込み");
}

ストリームリーダー/ライターの活用

// StreamWriterを使用した書き込み
using (var writer = new StreamWriter("log.txt"))
{
    writer.WriteLine("ログメッセージ");
}

// StreamReaderを使用した読み込み
using (var reader = new StreamReader("log.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

タグ: C# IO操作 FileStream StreamReader FileInfo

6月30日 23:10 投稿