いつもお世話になっております。
VB6.0から2005にアップデートした際にGet関数からFileGet関数に変更になりました。変更の際にはエラーにはなってなかったのですがデバックしようとしたところFileGet関数のところで止まってしまい下記のメッセージが出ました。
FileGet(1, kakoudata, 1)
のところで
EndOfStreamExceptionはハンドルされませんでした。
ストリームの終わりを超えて読み取ることはできません。
とメッセージがでてとまってしまいます。
このメッセージはどのような場合に出るのでしょうか?また対処はどのようにしたらよろしいのでしょうか?
ご指導お願いいたします
ファイル、あるいはメモリ上の領域など、データの入出力のための流れを
「ストリーム(Stream)」と呼びます。
今回の事例でいえば、ファイルにこれ以上データがない状態、すなわち、
ファイルの終端に到達したにも関わらず、さらにデータを読み込もうと
した場合に、そのような例外(Exception)が発生する事になります。
(同様のエラーは、VB6でも発生します)
> また対処はどのようにしたらよろしいのでしょうか
PeekメソッドやEndOfStreamプロパティなどを使って、読み込む前に、
終端に到達しているかどうかをチェックするようにしてください。
VB6のOpenステートメントや、VB.NETのFileOpenを使って読み込んだファイルは、
その終端に到達したかどうかをチェックするために、
VB6 : EOF 関数
VB2005: Microsoft.VisualBasic.FileSystem.EOF 共有メソッド
が使えます。これを使えば、終端のチェックができるでしょう。
ですが、FileOpenによるアクセスは、可読性の面から、あまりお奨めできません。
かわりに、My.Computer.FileSystem によるファイル入出力命令や、
System.IO名前空間にある標準の入出力命令を使ってみてください。
たとえば、System.IO.StreamReader を使ってファイルを開いた場合は、
PeekメソッドやEndOfStreamプロパティなどを使って、終端かどうかを
確認することができます。
魔界の仮面弁士様回等ありがとうございます。
まだまだ2005を扱うには知識が対内容なのでもう少し勉強をし何とか克服していきたいと思います。
本当にありがとうございました。
ツイート | ![]() |