プログラム技術、VB.NET TIPSの一覧に戻る

VB.NET にて、バイナリファイルの内部に格納されている値を読み込み、書き込みして保存する方法

VB.NET にて、バイナリファイルの内部に格納されている値(数値/文字列)を読み込み、書き込みして保存する方法


VB.NET にて、バイナリファイルを扱う方法を記載しておきます

まず、レガシー文字列命令を Str にて呼び出せるようにしておきます。(これは私が慣れているからです ^^;)

Imports Str = Microsoft.VisualBasic.Strings

ファイル全てをバイナリ配列に読み込みます

Dim fname As String = "C:\MyFileName.bin"
Dim fs As New System.IO.FileStream(fname, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim ByteArray(fs.Length - 1) As Byte

fs.Read(ByteArray, 0, ByteArray.Length)

ビットコンバータを使って、内容を部分的に読み込みます。
OffsetAddress には、バイト配列内の位置を指定します。
例えば single 型なら、自動的に OffsetAddress で指定した位置から、
4バイトが切り取られて読み込まれます。

Dim MyVal as Single
MyVal = BitConverter.ToSingle(ByteArray, OffsetAddress)

ファイル内容を読みこんだバイト配列全体から、文字列を抽出する際は、
以下のように Buffer.BlockCopy を使用します。
OffsetAddress で指定した位置から抽出されます。

Dim ByteArray2(10) as Byte
Buffer.BlockCopy(ByteArray, OffsetAddress, ByteArray2, 0, 10)
MyString = Replace(System.Text.Encoding.GetEncoding(932).GetString(ByteArray2), Chr(0), "")
(&H0 を除去しています。932 は SHIFT_JIS のことです。)

バイト配列の内容を変更して上書きする際は、以下のように Buffer.BlockCopy を使用します。
MyVal の値が OffsetAddress で指定した位置に書き込まれます。

Buffer.BlockCopy(BitConverter.GetBytes(MyVal), 0, ByteArray, OffsetAddress, BitConverter.GetBytes(MyVal).Length)

ファイル内容の変更が終わったら、

Dim fname2 As String = Str.Left(fname, InStrRev(fname, ".") - 1) & "_" & Format(Now, "yyyyMMddHHmmss") & Str.Mid(fname, InStrRev(fname, "."))
Dim fs2 As New System.IO.FileStream(fname2, System.IO.FileMode.Create, System.IO.FileAccess.Write)
fs2.Write(ByteArray, 0, ByteArray.Length)
fs2.Close()

のようにして、バイト配列全体をファイルにて出力します。

以上で、説明は終了です。




プログラム技術、VB.NET TIPSの一覧に戻る

Information of This Page
VB.NET にて、バイナリファイルの内部に格納されている値を読み込み、書き込みして保存する方法 pubdate:


© 2024
Author : FloatGarden