IRONSOFTWAREHOME
開発者向けアップデート

FileStream C#(開発者向けの仕組み)

Jacob Mellor, Chief Technology Officer @ Team Iron
Jacob Mellor
Updated: 2026年4月23日

この記事では、C#のFileStreamクラスに焦点を当て、ファイルの読み書き操作をどのように行うかを紹介します。 実用的な例を探求し、FileStreamの基本的な動作を理解し、ファイルデータを効率的に管理する方法を学びます。 このガイドはC#でのファイル操作が初めての方を対象としているため、言語は初心者向けでありながら、C#でファイルを操作するための詳細な指示とともにIronPDFライブラリの紹介も行います。

FileStreamとは何ですか?

C#のFileStreamクラスは、バイトを使用してファイルを操作する方法を提供します。 ファイルに対する読み書き操作を行い、ファイルの内容を直接操作することができます。 これは特に、入力/出力タスクでファイルを操作する際、特にバイト配列を操作する際に便利です。

FileStreamの使用例

FileStreamが理想的なケースは以下の通りです:

  • バイナリデータを直接ファイルから読み書きする。
  • 大きなファイルを効率的に扱う。
  • 非同期ファイル操作を行う。
  • メモリを効率的に使用してシステムリソースを管理する。

基本的な例

ここでは、ファイルを開いてデータを書き込み、FileStreamを使用して読み込む簡単な例を示します:

using System;
using System.IO;

public class Example
{
    public static void Main()
    {
        string path = "example.txt";
        
        // Creating a FileStream object to handle the file. The file handle is acquired here.
        using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
        {
            byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!");
            // Write data to file
            fileStream.Write(data, 0, data.Length);
        }
        
        // Read from the file
        using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[1024];
            int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
            string text = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine(text);
        }
    }
}

この例では、ファイルの読み書きを行うためにFileStreamオブジェクトを作成する方法を示しています。 FileStreamクラスはバイトを直接読み書きするため、大きなファイルやバイナリデータを扱うのに適しています。 テキストとバイトを変換するためにEncodingを使用しました。

FileStreamを使用したデータの書き込み

ファイルにデータを書き込むには、Writeメソッドを使用します。 以下はその動作をより詳細に説明する例です:

using System;
using System.IO;

public class FileWriteExample
{
    public static void Main()
    {
        string path = "output.txt";
        
        // Creating a FileStream object to write data to the file
        using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
        {
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes("Writing data to FileStream.");
            int offset = 0;
            int count = buffer.Length;
            
            // Writing data to the file
            fileStream.Write(buffer, offset, count);
        }
    }
}

このコードでは、UTF8エンコーディングを使用して文字列をバイト配列に変換します。 Writeメソッドは、現在の位置(オフセットによって決定される)から始まって指定されたバイト数をファイルに書き込みます。

  • FileMode.Createは新しいファイルを作成し、同名の既存ファイルを上書きします。
  • FileAccess.WriteはFileStreamに書き込み権限を与えます。

FileStreamを使用したデータの読み取り

次に、FileStreamを使用してファイルからデータを読む方法を探ります。

using System;
using System.IO;

public class FileReadExample
{
    public static void Main()
    {
        // File path
        string path = "output.txt";

        // File Stream Object
        using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[1024];
            int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
            // Output Stream
            string output = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine(output);
        }
    }
}

この例では:

  • FileMode.Openは既存のファイルを開きます。
  • Readメソッドは指定されたバイト数(バッファサイズに基づく)を読み込み、バイト配列バッファに格納します。 * バイトデータを文字列に戻すためにEncoding.UTF8.GetStringを使用します。

FileStreamによるファイルアクセスの管理

FileStreamクラスはファイルのアクセスを制御し、微細なファイルハンドルとシステムリソースの管理を可能にします。 FileStreamを使用する際は、使用後にストリームが適切に廃棄されるように、手動でusingステートメントを使用することが重要です。

ファイル位置の管理

ファイルを読み書きするたびに、FileStreamはファイル内の現在の位置を追跡します。この位置にはPositionプロパティを使用してアクセスできます:

fileStream.Position = 0; // Move to the beginning of the file

FileStreamを使用した非同期操作

FileStreamは非同期の読み書き操作に使用でき、ファイル操作が行われている間に他のプロセスを実行できることでパフォーマンスを向上させます。 ここに非同期読み取りの基本的な例があります:

using System;
using System.IO;
using System.Threading.Tasks;

public class AsyncReadExample
{
    public static async Task Main()
    {
        // Specified Path
        string path = "output.txt";
        
        using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 4096, true))
        {
            byte[] buffer = new byte[1024];
            int bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length);
            string result = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine(result);
        }
    }
}

ReadAsyncメソッドはデータを非同期に読み取ります。 FileMode.Openパラメーターは、ファイルのアクセス方法を制御します。

例外処理の例

FileStreamを扱う際には、ランタイムエラーを避けてシステムリソースを適切に管理するために例外処理が重要です。 ファイルの読み書き時に例外を処理するためのパターンを以下に示します:

using System;
using System.IO;

public class ExceptionHandlingExample
{
    public static void Main()
    {
        string path = "nonexistentfile.txt";
        
        try
        {
            using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                byte[] buffer = new byte[1024];
                int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
                Console.WriteLine("Bytes Read: " + bytesRead);
            }
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine($"Exception: {e.Message}");
        }
    }
}

バッファリングとパフォーマンス

FileStreamクラスにはバッファリング機構が組み込まれており、特に大きなファイルを操作する際のパフォーマンス向上に役立ちます。 バッファを使用すると、データは一時的にメモリに保存され、ディスクへのアクセスを頻繁に必要としなくなります。

using System;
using System.IO;

public class BufferingExample
{
    public static void Main()
    {
        string path = "bufferedfile.txt";
        byte[] data = System.Text.Encoding.UTF8.GetBytes("Buffered FileStream example.");
        
        using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.WriteThrough))
        {
            fileStream.Write(data, 0, data.Length);
        }
    }
}

ここで、FileOptions.WriteThroughは追加のバッファリングをバイパスして、データが直接ファイルに書き込まれることを保証します。 しかし、パフォーマンス調整のためにバッファサイズを制御できます。

IronPDFの紹介

FileStream C# (開発者向けの動作方法): 図1 - IronPDF: C# PDFライブラリ

IronPDFは、.NETアプリケーション内でPDFドキュメントを作成、編集、操作するための強力なC# PDFライブラリです。 開発者はIronPDFを使用してHTMLや画像、さらには生テキストなどのさまざまな入力からPDFを生成することができます。 透かしや結合、分割、パスワード保護などの機能を備えており、精密なPDF出力を必要とするWebおよびデスクトップアプリケーションに最適です。

FileStreamとIronPDF

IronPDFを使用してPDFを生成し、それをFileStreamに保存する例を示します。 これにより、IronPDFがFileStreamとスムーズに統合され、開発者がPDFの作成と保存をプログラムによって制御できることを示しています。

using System;
using System.IO;
using IronPdf;

public class IronPDFExample
{
    public static void Main()
    {
        // Define the file path
        string path = "output.pdf";
        
        // Create an HTML string that we want to convert to PDF
        var htmlContent = "<h1>IronPDF Example</h1><p>This PDF was generated using IronPDF and saved with FileStream.</p>";
        
        // Initialize IronPDF's ChromePdfRenderer to render HTML as PDF
        var renderer = new ChromePdfRenderer();
        
        // Generate the PDF from the HTML string
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        
        // Use FileStream to save the generated PDF
        using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
        {
            pdfDocument.SaveAs(fileStream);
        }
        
        Console.WriteLine("PDF created and saved successfully.");
    }
}

結論

FileStream C# (開発者向けの動作方法): 図2 - IronPDFライセンスページ

C#のFileStreamクラスは、ファイルの入出力を管理するための強力な機能を提供します。 これにより、開発者は効率的にデータを読み書きし、ファイル内の現在の位置を制御し、バイト配列、ファイルパス、ストリーム処理が連携する仕組みを理解することで非同期に動作します。 FileStreamとIronPDFを組み合わせて使用することで、.NETアプリケーション内でPDFを効率的に処理するための柔軟性を開発者に提供します。 レポートの生成、ファイルの保存、動的コンテンツの処理を行う際、この組み合わせはPDFドキュメントの作成と保存を精密に制御する手段を提供します。

IronPDFは無料トライアルと$999ライセンス料を提供しており、プロフェッショナルなPDF生成のニーズに対して競争力のあるソリューションです。

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor is Chief Technology Officer at Iron Software and a visionary engineer pioneering C# PDF technology. As the original developer behind Iron Software's core codebase, he has shaped the company's product architecture since its inception, transforming it alongside CEO Cameron Rimington into a 50+ person company serving NASA, Tesla, and global government agencies.

...
Read More

Related Articles

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

bullet_checkedクレジットカードやアカウントの作成は不要です。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge related to IronPDF Product Demo

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。