分類:[.NET 全般]
2014/06/10(Tue) 15:32:03 編集(投稿者)
2点ありまして、
@レコードに書き込みましたら
カウンターファイル(件数)が加算されていく処理を実現したいのですが、
FileGet(1, CO)
こちらで、ストリームの終わりを超えて読み取ることが出来ません
というエラーが出ています。
解消法が分かりません。
A @のエラーの為、確認できていませんが、
レコードごとに書き込まれる度に
カウンターファイルを足していってるのですが
書込みが終わった時にカウントアップという形で大丈夫でしょうか。
-------------------------------------------------------------------------------
●class1.vb
Public Class Class1
Friend Structure Countdat
Public Nowcount As Short
Public Maxcount As Short
End Structure
Friend Structure Person
<VBFixedStringAttribute(3)> Public No As String
<VBFixedStringAttribute(10)> Public Filemei As String
<VBFixedStringAttribute(1)> Public Drive As String
End Structure
Friend Shared p As Person
Friend Shared CO As Countdat
Friend Shared Function GetFilepath() As String 'ファイルパスを取得
ChDrive((My.Application.Info.DirectoryPath)) 'ドライブをアプリケーションに変更
ChDir((My.Application.Info.DirectoryPath)) 'パスをアプリケーションに変更
Return My.Application.Info.DirectoryPath '現在のパスを返す
End Function
Friend Shared Sub CreateMstFile(ByVal filepath As String) 'マスタファイル作成
Dim tt As New System.IO.StreamWriter _
(filepath & "\sample.mas", False, System.Text.Encoding.Default)
tt.Close()
End Sub
Friend Shared Sub CreateCntFile(ByVal filepath As String) 'カウンタファイル作成
Dim fs As System.IO.FileStream = System.IO.File.OpenWrite(filepath & "\count.mas")
fs.Close()
End Sub
Friend Shared Sub FormatData() 'データ初期化
p.No = ""
p.Filemei = ""
p.Drive = ""
End Sub
End Class
---------------------------------------------------------------------------
●write.vb
Imports random.Class1
Public Class Write
Inherits System.Windows.Forms.Form
Dim m_recno As String 'レコードカウンタ
Dim m_path As String 'ファイルパス
Private Sub Textclr() 'クリア処理
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
End Sub
'登録
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
FileOpen(2, m_path & "\sample.mas", OpenMode.Random, , , Len(p))
p.No = TextBox1.Text
p.Filemei = TextBox2.Text
p.Drive = TextBox3.Text
'1番目のレコードに書込み
FilePut(1, p, CO.Nowcount) 'カウント分マスタに書込み
CO.Nowcount = CO.Nowcount + 1 'Nowcountをカウントアップ
p.No = TextBox4.Text
p.Filemei = TextBox5.Text
p.Drive = TextBox6.Text
'2番目のレコードに書込み
FilePut(1, p, CO.Nowcount)
CO.Nowcount = CO.Nowcount + 1
p.No = TextBox7.Text
p.Filemei = TextBox8.Text
p.Drive = TextBox9.Text
'3番目のレコードに書込み
FilePut(1, p, CO.Nowcount)
CO.Nowcount = CO.Nowcount + 1
FileClose(1)
'CO.Nowcount = CO.Nowcount + 1 'Nowcountをカウントアップ
'DBファイルが無ければ生成
If (System.IO.File.Exists(m_path & "\sample.mas") = False) Then CreateMstFile(m_path)
'カウントファイルが無い場合は生成する
If (System.IO.File.Exists(m_path & "\count.mas") = False) Then
CreateCntFile(m_path)
CO.Nowcount = 0
CO.Maxcount = 1000 'カウントの初期化
End If
'1レコード4バイトのカウンタファイル
FileOpen(1, m_path & "\count.mas", OpenMode.Random, , , 4)
FilePut(1, CO)
FileClose(1)
'書き込んだ後テキストリセット
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
End Sub
Private Sub Write_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
m_path = GetFilepath() 'パス取得
'ファイルが無い場合は生成
If (System.IO.File.Exists(m_path & "\count.mas") = False) Then
CreateCntFile(m_path)
CO.Nowcount = 0
CO.Maxcount = 1000
'1レコード4バイトのカウンタファイル
FileOpen(1, m_path & "\count.mas", OpenMode.Random, , , 4)
FilePut(1, CO) 'カウントデータを上書きして書き込み
Else
'カウンタファイルを開く
FileOpen(1, m_path & "\count.mas", OpenMode.Random, , , 4)
FileGet(1, CO) 'COにカウンタを読み込む
If CO.Nowcount < 1 Then
CO.Nowcount = 0
CO.Maxcount = 1000
FilePut(1, CO)
End If
End If
End Sub
End Class