掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
InputB関数でエラーが出ます (ID:102192)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そういえばFor Inputって「テキストモード」でしたね・・・見落としてました。 オープンモードによって対象が変化した結果だったわけですか。 原因がわかって良かったですね。 >ななさんや他の皆さんはテキストファイルを文字列変数に読み込みたいときどのようにされていますか? 私はいつも相手がテキストであろうとバイナリであろうとかまわずFor Binaryで開いてますよ。 すべてを一気にGetステートメントで取り込んだ後オンメモリでUnicodeに変換処理してます。 (読み込むファイルが数百MBを超えるような場合は分割処理しますけど) 標準でのファイル入出力と言うとこのOpenステートメントか、あるいはFSOオブジェクトですが、 VB6の時点のFSOはテキストモードしか扱えない不完全体だった気がします。 結局、VB6では嫌でもOpenステートメントを使わざるを得ないんじゃないでしょうか。 OpenステートメントはVB6のコーディング規則を逸脱する特殊な記述法が多くて私も嫌いです。 細かい情報を得るのが難しくて、クラス・オブジェクトを理解するよりよっぽど難解だと思うのは私だけでしょうか。 (テキストモードでPrintステートメントが最後に改行を出力してしまうのを防ぐ方法なんてコードの最後に半角スペースとセミコロンを記述するという規則でしたが、あれはいまだに理解し難いよ) というかいつも自作関数で処理してるので、もうOpenの仕様とかうろ覚えになってる私です。 とりあえず、私が普段使ってる関数を公開しておきますね。 一応ファイルの一部分だけ読み出す事に対応したり、 引数のチェックと自動補正機能があったりしてコードが長ったらしくなってますけど。 Public Function FileByteRead(ByVal FilePath As String, ByRef Bytes() As Byte, Optional StartPoint As Long = 0, Optional ByteLength As Long = -1) As Long '|| 正式関数名 :バイナリリード Ver1.2 (c)2004/04/12 なな. - 2007/02/11改定 なな. '|| 動作 :ファイルを開いてバイナリ読み込み。 '|| 引数 :FilePath:開くファイルのフルパス Bytes:読み込んだバイナリの格納用動的配列 '|| :StartPoint:読み込み位置の指定(0=先頭) ByteLen:読み込みバイト数の指定(-1以下=ファイル終端まで) '|| 戻り値 :0以上=成功(バイト数) -1=Open失敗 -2=読込みErr -3=引数Err(SP) -4=引数Err(BL) '|| 参照設定 :(なし) '|| 使用関数 :(なし) Dim FileNo As Integer Dim Ret As Long '引数のチェック1(開始位置が0以下なら不正) If StartPoint < 0 Then FileByteRead = -3 Exit Function End If FileNo = FreeFile On Error GoTo OpenErr '(ファイルが開けなければ不正) Open FilePath For Binary As #FileNo 'バイナリアクセスモード On Error GoTo 0 'ファイルのチェック(ファイルサイズが0バイトの場合 If LOF(FileNo) = 0 Then Close #FileNo FileByteRead = 0 Erase Bytes 'メモリサイズ消去。 Exit Function End If '引数のチェック2(開始位置がファイルの長さを超えているなら不正) If StartPoint > (LOF(FileNo) - 1) Then Ret = -3 Else '引数の初期化A If ByteLength <= -1 Then ByteLength = (LOF(FileNo)) - StartPoint End If '引数のチェック3 (読み込み長が0以下なら不正) If ByteLength <= 0 Then Ret = -4 Else '引数の初期化B(読み込みの長さ指定がファイルを越えていたら自動的にEOFまで) If StartPoint + (ByteLength - 1) > (LOF(FileNo) - 1) Then ByteLength = (LOF(FileNo) - 1) - StartPoint + 1 End If On Error GoTo SizeErr ReDim Bytes(0 To (ByteLength - 1)) 'メモリサイズの初期化 On Error GoTo 0 Get #FileNo, StartPoint + 1, Bytes 'ファイルから読み込み End If End If Close #FileNo FileByteRead = ByteLength Exit Function '---------------------------------------------------------------------- OpenErr: FileByteRead = -1 'MsgBox "既知の例外エラー、ファイルオープンエラーが発生。" Exit Function '---------------------------------------------------------------------- SizeErr: 'ファイル開けたけど、読み込みバイト数が0以下になった場合発生。 'とにかくファイルをクローズ。 Close #FileNo FileByteRead = -2 Erase Bytes 'メモリサイズ消去。 End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.