- - PR -
HELP!! 【vb2005:構造体に固定長文字列の配列を使用。FileGetでエラー発生! T T】
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-14 10:59
初めて投稿させて頂きます。
現在、旧プログラムを《Visual Studio 2005 VB》へ移行しております。 Len値は同一なのに、FileGet時に「ストリームの終りを越えて読み取ることはできません」旨のエラーメッセージが出ます。 ご助言をお願いいたします。 -------------------------------------------------------------------- ↓【旧プログラム】 '構造体宣言 Private Type MyRecord Name(5) As String * 20 StartDate(5) As Date EndDate(5) As Date End Type 'ファイル内容取得ファンクション Public Function GetFileData() As Boolean Dim mTyp_MyRecord As MyRecord 'ランダムアクセス Len値:216 Open "c:\Data1.dat" For Random Access Read Shared As #1 Len = Len(mTyp_MyRecord) Get #1, 1, mTyp_MyRecord Close #1 End Function ↓【vb2005プログラム】 '構造体宣言 Private Structure MyRecord <VBFixedArray(5), VBFixedString(20)> Dim Name() As String <VBFixedArray(5)> Dim StartDate() As Date <VBFixedArray(5)> Dim EndDate() As Date End Structure 'ファイル内容取得ファンクション Public Function GetFileData() As Boolean Dim mTyp_MyRecord As New MyRecord 'ランダムアクセス Len値:216 FileOpen(1, "c:\Data1.dat", OpenMode.Random, OpenAccess.Read, OpenShare.Default, Len(mTyp_MyRecord)) FileGet(1, mTyp_MyRecord, 1) FileClose(1) End Function -------------------------------------------------------------------- <VBFixedArray>指定のみの構造体や、 <VBFixedString>指定のみの構造体によるFileGetは成功しています。 Len値は同じなのに「ストリームの終りを越えて読み取ることはできません」旨の エラーが出るのはどういうことなのでしょうか??? 構造体の宣言にミスが・・・??? ビルドは成功していますし、FileOpenも正常に行われているようです。 [ メッセージ編集済み 編集者: tulip 編集日時 2007-09-14 11:01 ] [ メッセージ編集済み 編集者: tulip 編集日時 2007-09-14 11:03 ] | ||||
|
投稿日時: 2007-09-14 11:44
件名:FileGet関数 ”ストリームの終わりを超えて読み取ることはできません”
VB.NETで配列を宣言するには? こんな記事やら投稿が参考になりそうですけどご覧になりましたか? | ||||
|
投稿日時: 2007-09-14 11:57
----------------------------------------------------------------------- はい、昨日拝見しました。 配列の宣言については、構造体にて配列を使用したプログラムで検証済みです。 質問内のファイルと同様、ランダムアクセスでのFileGetも成功しております。 同様のエラー”ストリームの終わりを〜”の投稿に関しましては、 私の場合Len値のサイズが同じですので配列の要素数の問題とも考えにくいのですが・・・ けど、”ストリームの終わりを超えて読み取ることはできません”旨のエラーメッセージが出るということは要素数等サイズの問題かと思い、 昨日試行錯誤を繰り返し要素数を減らす等のことは試したのですが、結果は同じでした。(泣) | ||||
|
投稿日時: 2007-09-14 12:26
MessageBox.Show(FileLen("c:\Data1.dat"))
これで216未満ならエラーになるのは正しいでしょうね。 | ||||
|
投稿日時: 2007-09-14 13:23
------------------------------------------------------- 解決しました。 ありがとうございました。 FileLenでサイズを確認したところ、別のファイルを参照していることが判明しました。^^; 何分初心者なもので・・・・・お手数おかけしました。 |
1