● バイナリファイルかテキストファイルかを判定する ●

判定の方法はNULL文字(=Chr$(0))が含まれているか・いないかを見ればよろしいのでは。API 関数に GetBinaryType というものがあるけど(私は使ったことはない)確かこれって、Windows NTでしか使えなかった気がする。やっぱ、Windows 95 でも使えなきゃね。それではコーディング開始。

'-------------------------------------------------------------------
' 関数名 : IsBinaryFile
' 機能 : ファイルがバイナリファイルか判定する
' 引数 : (in) fPath … 読み込むファイルのパス
' 返り値 :  True … バイナリファイルである
'            False… バイナリファイルでない
'-------------------------------------------------------------------
Private Function IsBinaryFile(ByVal FilePath As String) As Boolean

    Dim BinDataBuf() As Byte '文字列格納用バッファ(バイト配列)
    Dim FileSize As Long      'ファイルサイズ
    Dim FileNum As Integer    'ファイルナンバー

    FileNum = FreeFile

    Open FilePath For Binary As #FileNum
        FileSize = LOF(FileNum)
        ReDim Preserve BinDataBuf(FileSize - 1) As Byte 'メモリー再確保
        BinDataBuf() = InputB(FileSize, FileNum)
    Close #FileNum

    IsBinaryFile = CBool(InStrB(1, BinDataBuf(), Chr$(0)))

End Function

エラー処理はしてないけど、まあ、こんな感じかな。もっと動作を速くしたいのであれば、Open ステートメントでなく ReadFile API関数を使ってね。それは、こちらを参照。NULL文字が無いバイナリファイルもあるんじゃない?という疑問が浮かぶ方もいると思うんだけど、いやぁ〜、全くその通り、お見事。ごくまれに、そのようなバイナリファイルが存在するみたい。従って、バイナリファイルをテキストファイルと判定してしまうときがある。でも、そのようなケースは先ほども言ったけど、本当にまれ。そのようなケースに遭遇したら、素直にあきらめて寝よう。


戻る