.NET ヘルプ

FileStream C# (開発者のための仕組み)

公開済み 2024年10月24日
共有:

この記事ではFileStream クラスC#で、ファイルの読み取りと書き込みの操作を実行するのに役立ちます。 実用的な例を検討し、FileStream の中核となる仕組みを理解し、ファイルデータを効率的に管理する方法を学びます。 このガイドは、C#でのファイル操作の初心者を対象としているため、言語は初心者に優しいまま、C#でのファイル操作の詳細な手順とIronPDFライブラリまた。

FileStream とは何ですか。

C#のFileStreamクラスは、バイトを使用してファイルを処理する方法を提供します。 ファイルに対する読み取りと書き込み操作で動作し、ファイルの内容を直接操作することができます。 これは、入出力タスクのためにファイルを扱うとき、特にバイト配列を操作するときに特に役立ちます。

FileStream の使用例

FileStream は次のような用途に最適です:

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

基本例

FileStreamを使用して、ファイルを開き、データを書き込み、それを読み取る簡単な例を示します:

using System;
using System.IO;
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!");
        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);
    }
}
using System;
using System.IO;
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!");
        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);
    }
}
Imports System
Imports System.IO
Public Shared Sub Main()
	Dim path As String = "example.txt"
	' Creating a FileStream object to handle the file. The file handle is acquired here.
	Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
		Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!")
		fileStream.Write(data, 0, data.Length)
	End Using
	' Read from the file
	Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
		Dim buffer(1023) As Byte
		Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
		Dim text As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
		Console.WriteLine(text)
	End Using
End Sub
VB   C#

この例では、ファイルの読み取りと書き込み操作を処理する FileStream オブジェクトを作成する例を示します。 FileStream クラスは、バイトを直接読み書きするため、大きなファイルやバイナリデータの処理に適しています。 テキストとバイト間の変換にはエンコーディングを使用しました。

FileStream によるデータの書き込み

データをファイルに書き込むには、Writeメソッドを使用します。 以下は、この翻訳がどのように機能するかを詳しく説明した例です:

using System;
using System.IO;
public static void Main()
{
    string path = "output.txt";
    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);
    }
}
using System;
using System.IO;
public static void Main()
{
    string path = "output.txt";
    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);
    }
}
Imports System
Imports System.IO
Public Shared Sub Main()
	Dim path As String = "output.txt"
	Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
		Dim buffer() As Byte = System.Text.Encoding.UTF8.GetBytes("Writing data to FileStream.")
		Dim offset As Integer = 0
		Dim count As Integer = buffer.Length
		' Writing data to the file
		fileStream.Write(buffer, offset, count)
	End Using
End Sub
VB   C#

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

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

FileStream によるデータの読み取り

それでは、FileStream を使ってファイルからデータを読み取る方法を探ってみましょう。

using System;
using System.IO;
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);
    }
}
using System;
using System.IO;
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);
    }
}
Imports System
Imports System.IO
Public Shared Sub Main()
	' File path
	Dim path As String = "output.txt"
	' File Stream Object
	Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
		Dim buffer(1023) As Byte
		Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
	' Output Stream
		Dim output As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
		Console.WriteLine(output)
	End Using
End Sub
VB   C#

この例では:

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

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

FileStreamクラスは、ファイルへのアクセスを制御し、ファイルハンドルやシステムリソースの管理を細かく設定することができます。 FileStream を使用する場合、使用後にストリームが適切に破棄されるようにすることが重要です。()手動で、または自動的にストリームを破棄するステートメントを使用してください。

ファイルの位置

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

fileStream.Position = 0; // Move to the beginning of the file
fileStream.Position = 0; // Move to the beginning of the file
fileStream.Position = 0 ' Move to the beginning of the file
VB   C#

FileStream を使用した非同期操作

FileStream は、非同期の読み取りおよび書き込み操作に使用でき、ファイル操作の実行中に他のプロセスを実行できるため、パフォーマンスが向上します。 以下は、非同期読み上げの基本的な例です:

using System;
using System.IO;
using System.Threading.Tasks;
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);
    }
}
using System;
using System.IO;
using System.Threading.Tasks;
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);
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Public Shared Async Function Main() As Task
	' Specified Path
	Dim path As String = "output.txt"
	Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 4096, True)
		Dim buffer(1023) As Byte
		Dim bytesRead As Integer = Await fileStream.ReadAsync(buffer, 0, buffer.Length)
		Dim result As String = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead)
		Console.WriteLine(result)
	End Using
End Function
VB   C#

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

例外処理の例

FileStream**を使用する場合、例外処理は実行時エラーを回避し、システムリソースを適切に管理するために不可欠です。 ファイルを読み書きするときの例外処理のパターンを示します:

using System;
using System.IO;
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}");
    }
}
using System;
using System.IO;
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}");
    }
}
Imports System
Imports System.IO
Public Shared Sub Main()
	Dim path As String = "nonexistentfile.txt"
	Try
		Using fileStream As New FileStream(path, FileMode.Open, FileAccess.Read)
			Dim buffer(1023) As Byte
			Dim bytesRead As Integer = fileStream.Read(buffer, 0, buffer.Length)
			Console.WriteLine("Bytes Read: " & bytesRead)
		End Using
	Catch e As FileNotFoundException
		Console.WriteLine($"Exception: {e.Message}")
	End Try
End Sub
VB   C#

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

FileStreamクラスは、特に大きなファイルを扱う場合に、より高速なパフォーマンスを可能にするバッファリング機構を備えています。 バッファを使用すると、データが一時的にメモリに保存されるため、常にディスクにアクセスする必要がなくなります。

using System;
using System.IO;
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);
    }
}
using System;
using System.IO;
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);
    }
}
Imports System
Imports System.IO
Public Shared Sub Main()
	Dim path As String = "bufferedfile.txt"
	Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes("Buffered FileStream example.")
	Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.WriteThrough)
		fileStream.Write(data, 0, data.Length)
	End Using
End Sub
VB   C#

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

IronPDFの紹介

FileStream C# (ファイルストリーム C#)(開発者向けの仕組み):図1 - IronPDF:C# PDFライブラリ

IronPDFは、.NETアプリケーション内でPDF文書を作成、編集、操作するための堅牢なC# PDFライブラリです。 開発者はHTMLなどのさまざまな入力からPDFを生成また、IronPDFを使用して、画像や生テキストも作成できます。 電子透かし、結合、分割、パスワード保護などの機能を持つIronPDFは、PDF出力を正確にコントロールするウェブアプリケーションやデスクトップアプリケーションに理想的です。

FileStreamとIronPDF

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

using System;
using System.IO;
using IronPdf;
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.");
}
using System;
using System.IO;
using IronPdf;
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.");
}
Imports System
Imports System.IO
Imports IronPdf
Public Shared Sub Main()
	' Define the file path
	Dim path As String = "output.pdf"
	' Create an HTML string that we want to convert to PDF
	Dim 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
	Dim renderer = New ChromePdfRenderer()
	' Generate the PDF from the HTML string
	Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
	' Use FileStream to save the generated PDF
	Using fileStream As New FileStream(path, FileMode.Create, FileAccess.Write)
		pdfDocument.SaveAs(fileStream)
	End Using
	Console.WriteLine("PDF created and saved successfully.")
End Sub
VB   C#

結論

FileStream C# (ファイルストリーム C#)(開発者のための仕組み):図2 - IronPDFライセンスページ

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

IronPDFは無料試用また、ライセンス料は749ドルで、Professional PDF生成のニーズに対して競争力のあるソリューションとなっています。

< 以前
C#初期化リスト(開発者のための仕組み)
次へ >
C# Init キーワード(開発者のための仕組み)