Back to Top

Monthly Archives: 3月 2016

VB.NET 固定長ファイルの読み込み・書き込み

固定長ファイル(ランダムファイル)の読み込み、書き込みについて説明します。

固定長ファイルは、データがテキスト形式とは限りません。バイナリー形式もあります。

VBでは、FileSystem クラスを使用することにより、簡単に固定長ファイルのアクセスが出来ます。

・System.Runtime.InteropServicesをインポートします。

 

FileSystem クラスを使用して、固定長ファイルの読み書きをする

固定長ファイルの構造体

<StructLayout(LayoutKind.Sequential, Pack:=1)>
Friend Structure Person
    <VBFixedArray(10 - 1)> Public Name() As Byte
    <VBFixedArray(5 - 1)> Public Age() As Byte
End Structure

ランダムファイルの読み書き

Dim FilePath As String = "C:\work\myrfile.txt"

'レコード長を取得する
Dim recordLen As Long = Len(New Person())

Dim pos As Person = New Person()

'ファイルをオープンする
Dim FileNo As Integer = FileSystem.FreeFile
FileSystem.FileOpen(FileNo, FilePath, OpenMode.Random, OpenAccess.ReadWrite, OpenShare.Default, recordLen)

'全レコード数を取得する
Dim recordMax As Long = FileSystem.LOF(FileNo) \ recordLen

'1レコード読み込む(先頭レコード)
FileSystem.FileGet(FileNo, pos, 1)

'1レコードを書き込む(最終レコードに追加)
FileSystem.FilePut(FileNo, pos, recordMax + 1)

'ファイルをクローズする
FileSystem.FileClose(FileNo)

 

VB.NET 文字列とバイト配列の変換をする

文字列からバイト配列(Byte())もしくは、バイト配列から文字列への変換について記載します。

変換には、System.Text.Encoding.GetEncodingメソッドを使用します。

バイト型配列から文字列に変換する

Dim str As String

'【Shift JIS から変換する】
str = System.Text.Encoding.GetEncoding(932).GetString(bytesData)
'または
str = System.Text.Encoding.GetEncoding("sjis").GetString(bytesData)

'【JISコード から変換する】
str = System.Text.Encoding.GetEncoding(50220).GetString(bytesData)
'または
str = System.Text.Encoding.GetEncoding("iso-2022-jp").GetString(bytesData)

'【EUCコード から変換する】
str = System.Text.Encoding.GetEncoding(51932).GetString(bytesData)
'または
str = System.Text.Encoding.GetEncoding("euc-jp").GetString(bytesData)

'【UTF-8コード から変換する】
str = System.Text.Encoding.GetEncoding(65001).GetString(bytesData) 
'または
str = System.Text.Encoding.GetEncoding("utf-8").GetString(bytesData)
'または
str = System.Text.Encoding.UTF8.GetString(bytesData)

※Encodingには、同じ変換でも書き方が数通りあります。上記以外にも文字コードはあります。

 

文字列からバイト型配列に変換する

Dim str As String = "文字列です。"
Dim bytesData As Byte()

'【Shift JIS に変換する】
bytesData = System.Text.Encoding.GetEncoding("sjis").GetBytes(str)

'【JISコード に変換する】
bytesData = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(str)

'【EUCコード に変換する】
bytesData = System.Text.Encoding.GetEncoding("euc-jp").GetBytes(str)

'【UTF-8コード に変換する】
bytesData = System.Text.Encoding.UTF8.GetBytes(str)