- PR -

HELP!! 【vb2005:構造体に固定長文字列の配列を使用。FileGetでエラー発生! T T】

1
投稿者投稿内容
tulip
会議室デビュー日: 2007/09/14
投稿数: 6
投稿日時: 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/08/24
投稿数: 34
投稿日時: 2007-09-14 11:44
件名:FileGet関数 ”ストリームの終わりを超えて読み取ることはできません”

VB.NETで配列を宣言するには?

こんな記事やら投稿が参考になりそうですけどご覧になりましたか?
tulip
会議室デビュー日: 2007/09/14
投稿数: 6
投稿日時: 2007-09-14 11:57
引用:

プレマニアさんの書き込み (2007-09-14 11:44) より:
件名:FileGet関数 ”ストリームの終わりを超えて読み取ることはできません”

VB.NETで配列を宣言するには?

こんな記事やら投稿が参考になりそうですけどご覧になりましたか?



-----------------------------------------------------------------------

はい、昨日拝見しました。

配列の宣言については、構造体にて配列を使用したプログラムで検証済みです。
質問内のファイルと同様、ランダムアクセスでのFileGetも成功しております。

同様のエラー”ストリームの終わりを〜”の投稿に関しましては、
私の場合Len値のサイズが同じですので配列の要素数の問題とも考えにくいのですが・・・

けど、”ストリームの終わりを超えて読み取ることはできません”旨のエラーメッセージが出るということは要素数等サイズの問題かと思い、
昨日試行錯誤を繰り返し要素数を減らす等のことは試したのですが、結果は同じでした。(泣)

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-14 12:26
MessageBox.Show(FileLen("c:\Data1.dat"))
これで216未満ならエラーになるのは正しいでしょうね。
tulip
会議室デビュー日: 2007/09/14
投稿数: 6
投稿日時: 2007-09-14 13:23
引用:

べるさんの書き込み (2007-09-14 12:26) より:
MessageBox.Show(FileLen("c:Data1.dat"))
これで216未満ならエラーになるのは正しいでしょうね。



-------------------------------------------------------

解決しました。
ありがとうございました。

FileLenでサイズを確認したところ、別のファイルを参照していることが判明しました。^^;

何分初心者なもので・・・・・お手数おかけしました。
1

スキルアップ/キャリアアップ(JOB@IT)