バイナリデータのファイル入出力について

解決


生茶  2005-06-28 02:58:55  No: 123101

質問ばかりで申し訳御座いません。。

バイナリデータを含むファイル入出力についての質問です。
過去ログが充実しているとは思いますが宜しくお願い致します。

以下バイナリーコードのデータファイルを入力及び出力するにあたり、
うまく処理結果を得る事が出来ません。

FC 10 C8 0C 04 00 00 00 00 00 00 00 00 00 44 45 52 45 51 46 31 34 00 00 00 00 00 (省略)

過去ログより、バイト配列を使用してバイナリーデータを取得するところ
まではわかっております。また、コードをお借りして
以下現在のコードと出力結果を記載させて頂きます。

Private Buff()              As Byte
Private FileSize            As Long
Private intFileNo           As Integer
Private Const InputFile     As String = "C:\Test\InFile.log"
Private Const OutputFile    As String = "C:\Test\OutFile.log"

Private Sub Command1_Click()

    ' バイト配列として入力
    intFileNo = FreeFile
    Open InputFile For Binary As intFileNo
        FileSize = LOF(intFileNo)
        ReDim Preserve Buff(FileSize - 1) As Byte 'メモリー再確保
        Buff() = InputB(FileSize, intFileNo)
    Close intFileNo
    
    ' バイト配列を出力
    intFileNo = FreeFile
    Open OutputFile For Output Access Write As #intFileNo
        Print #intFileNo, Buff()
    'ファイルを閉じる
    Close #intFileNo

End Sub

出力結果

3F 3F 04 00 00 00 00 3F 3F 3F 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 81 40 3F 0D 0A

入力データと出力データで差異をなくすにはどのようなコーディングが必要
なのでしょうか。。
イミディエイトウィンドウにてバイナリデータ入力処理後のBuffを確認しま
したところ、入力の時点でうまくバイト配列に格納出来ていませんでした。

何か足りないコードがある等、ご教授頂きたくお願い申し上げます。

環境はVB6.0のWindowsXPです。


ひろ  2005-06-28 03:18:55  No: 123102

以前にも書いた気がする。
(1)書込の場合も For Binary で開くことが出来る
(2)空にしてから書きたいなら For Outputで開いてから閉じて、その後に再度 For Binary で開く
(3)追記したい場合は Seek でファイルの末尾へ
  http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200412/04120090.txt
あたりで解決しませんか?


生茶  2005-06-28 04:15:19  No: 123103

ひろ様
  
ご回答有難う御座います。m(__)m

出力をBinaryModeにする事によって解決致しました。
イミディエイトウィンドウで私が確認していたものは違う文字コードだった
のですね。

以下コードを記載し、解決とさせて頂きます。

Private Sub Command1_Click()

    ' バイト配列として入力
    intFileNo = FreeFile
    Open InputFile For Binary As intFileNo
        FileSize = LOF(intFileNo)
        ReDim Preserve Buff(FileSize) As Byte 'メモリー再確保
        Buff() = InputB(FileSize, intFileNo)
    Close intFileNo
    
    ' バイト配列を出力
    intFileNo = FreeFile
    Open OutputFile For Binary Access Write As #intFileNo
        Put #intFileNo, , Buff
    Close #intFileNo

End Sub

ひろ様有難う御座いました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加