Back to Top

Daily Archives: 2016年3月27日

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 シーケンシャルファイルの読み込み・書き込み

シーケンシャルファイルの読み込み、書き込みについて記載します。

シーケンシャルファイルは、通常テキストファイルなのでテキストファイルの読み込み、書き込み、と同じようなものです。

以下には、昔ながらのファイル番号を使用して、ファイルをオープンし処理する方法を記載します。

シーケンシャルファイルを読み込む

Dim dtList As List(Of String) = New List(Of String)

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

Dim FileNo As Integer = FileSystem.FreeFile
FileSystem.FileOpen(FileNo, FilePath, OpenMode.Input)

Dim s As String = ""
Do While (Not FileSystem.EOF(FileNo))
    FileSystem.Input(FileNo, s)
    dtList.Add(s)
Loop

FileSystem.FileClose(FileNo)

 

シーケンシャルファイルを書き込む

Dim dtList As List(Of String) = New List(Of String)
dtList.Add("AAA")
dtList.Add("BBB")
dtList.Add("CCC")
Dim FilePath2 As String = "C:\work\mysfile2.txt"

Dim FileNo2 As Integer = FileSystem.FreeFile
FileSystem.FileOpen(FileNo2, FilePath2, OpenMode.Output)

For Each s2 As String In dtList
    FileSystem.PrintLine(FileNo2, s2)
Next

FileSystem.FileClose(FileNo2)