このエントリーをはてなブックマークに追加


バイナリーファイルの作成・リード・ライト(バイト単位の読み書き)

バイト単位で読込したい、書き込みしたい、ファイルを作成したい場合は、FileStreamクラスを使うと実現できます。
尚、Fileクラスで一気にByte配列として読み込むメソッドがありますので、リードの場合は File.ReadAllBytes が便利かもしれませんね。
以下に、FileStream クラスを使った C#, Visual Basic のサンプルコードと実行例を記します。

関連サイト

関連記事

動作確認環境

  • Windows 10 ver.1909
  • Visual Studio 2019
  • .NET Core
  • コンソールアプリケーション

Fileクラスを使ったファイル操作サンプルコード

以下のサンプルコードは以下の動作になります。

  1. ファイルがあれば、追記モードでファイルを開きます。
    ファイルが無ければ新規に作成します。
  2. バイナリー値を0から0から10まで書き込みます。
  3. 作成(追記)したファイルを開き、読込し値を表示します。

C#

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string desktopPath = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        string filename = System.IO.Path.Combine(desktopPath, "test.dat");

        try
        {
            // File Open(or Create) and Append mode
            using (var fs = File.Open(filename, FileMode.Append, FileAccess.Write))
            {
                for (int i = 1; i <= 10; i++)
                    fs.WriteByte((byte)i);
            }

            // File Read and stdout
            using (var fs = File.Open(filename, FileMode.Open, FileAccess.Read))
            {
                long i = 0L;
                while (i < fs.Length)
                {
                    Console.WriteLine("{0}: {1}", i, fs.ReadByte());
                    i += 1;
                }
            }
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Exception: " + ex.ToString());
        }
    }
}

Visual Basic

Imports System
Imports System.IO

Module Program
    Sub Main(args As String())

        Dim desktopPath As String = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
        Dim filename As String = System.IO.Path.Combine(desktopPath, "test.dat")

        Try
            'File Open(or Create) and Append mode
            Using fs = File.Open(filename, FileMode.Append, FileAccess.Write)
                For i As Integer = 1 To 10
                    fs.WriteByte(CByte(i))
                Next
            End Using

            'File Read and stdout
            Using fs = File.Open(filename, FileMode.Open, FileAccess.Read)
                Dim i As Long = 0L
                While i < fs.Length
                    Console.WriteLine("{0}: {1}", i, fs.ReadByte)
                    i += 1
                End While
            End Using

        Catch ex As Exception
            Console.Error.WriteLine("Exception: " & ex.ToString)
        End Try

    End Sub
End Module

実行結果

上記サンプルコードを2回起動しています。
2回目で追記されていることが確認できます。

run.png
 

また、ファイル内容を PowerShellの Format-Hex コマンドレットを使って16進数表示した結果です。

run2.png

以上、Fileクラスの ReadByte, WriteByte を使ってバイト値のバイナリーファイルの読み書きでした。


添付ファイル: fileProgram.cs 168件 [詳細] fileProgram.vb 175件 [詳細] filerun.png 182件 [詳細] filerun2.png 164件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-05-06 (水) 09:49:12