C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

カウンターファイル 件数処理


(過去ログ 121 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■72467 / inTopicNo.1)  カウンターファイル 件数処理
  
□投稿者/ ガンツクツー (1回)-(2014/06/10(Tue) 15:28:26)

分類:[.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

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -