- PR -

FileGet関数 ”ストリームの終わりを超えて読み取ることはできません”

1
投稿者投稿内容
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2005-12-05 19:21
こんにちは、chibanaです。以下のコードでFileGetがうまくできず。
”ストリームの終わりを超えて読み取ることはできません”のエラーが
でてしまいます。おそらくストリームの終端から読み込もうとしているの
だと思いますが、バイト位置を先頭にする関数などありますか?

Dim udlDataB() As Byte
Dim udlpath As String = "C:\test.txt"

FileOpen(1, udlpath, OpenMode.Binary)
filesize = LOF(1)
ReDim udlDataB(filesize)
FileGet(1, udlDataB, -1)
FileClose(1)

初歩的なところで申し訳ありませんが、よろしくお願いします。

chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2005-12-05 20:20
chibanaです。

ちなみに
seek(1,1)
を間に入れてもだめでした。

Dim file As New System.IO.StreamReader("C:test.txt")
Dim words As String = file.ReadToEnd()
file.Close()

だとうまくいきます。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-12-05 20:56
配列を宣言するときの文法を確認してください。
引用:
コード:
filesize = LOF(1)
ReDim udlDataB(filesize) 



この記述だと、仮にファイルサイズが50バイトの場合、51バイト分の配列を用意していることになりますよね。
引用:
コード:
FileGet(1, udlDataB, -1) 



ファイルサイズよりも常に1バイト大きなサイズを指定して読み出そうとしているのですから、そりゃエラーになりますよ。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2005-12-05 21:09
chibanaです。
甕星さん、ありがとうございます。

FILEGETのレファレンスも確認したんですが・・。
そうだったんですね。お恥ずかしい。

ReDim udlDataB(filesize - 1)

としたらうまくいきました。

ありがとうございました!!

1

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