方法: Visual Basic でバイナリ ファイルを読み取る

My.Computer.FileSystem オブジェクトには、バイナリ ファイルを読み取るための ReadAllBytes メソッドが用意されています。

バイナリ ファイルを読み取るには

  • ReadAllBytes メソッドを使用します。このメソッドは、ファイルの内容をバイト配列として返します。 次のコードは、C:/Documents and Settings/selfportrait.jpg ファイルから読み取りを行う例です。

    Dim bytes = My.Computer.FileSystem.ReadAllBytes(
                  "C:/Documents and Settings/selfportrait.jpg")
    PictureBox1.Image = Image.FromStream(New IO.MemoryStream(bytes))
    
  • 大きいバイナリ ファイルの場合は、FileStream オブジェクトの Read メソッドを使用して、一度に指定した量だけファイルから読み取ることができます。 その後、各読み取り操作でファイルからメモリに読み込まれる量を制限することができます。 次のコード例では、ファイルをコピーし、各読み取り操作でファイルからメモリに読み込まれる量を呼び出し元が指定できるようにします。

    ' This method does not trap for exceptions. If an exception is 
    ' encountered opening the file to be copied or writing to the 
    ' destination location, then the exception will be thrown to 
    ' the requestor.
    Public Sub CopyBinaryFile(ByVal path As String,
                              ByVal copyPath As String,
                              ByVal bufferSize As Integer,
                              ByVal overwrite As Boolean)
    
        Dim inputFile = IO.File.Open(path, IO.FileMode.Open)
    
        If overwrite AndAlso My.Computer.FileSystem.FileExists(copyPath) Then
            My.Computer.FileSystem.DeleteFile(copyPath)
        End If
    
        ' Adjust array length for VB array declaration.
        Dim bytes = New Byte(bufferSize - 1) {}
    
        While inputFile.Read(bytes, 0, bufferSize) > 0
            My.Computer.FileSystem.WriteAllBytes(copyPath, bytes, True)
        End While
    
        inputFile.Close()
    End Sub
    

信頼性の高いプログラミング

次の条件を満たす場合は、例外がスローされる可能性があります。

  • パスが無効である場合。1) 長さが 0 の文字列である、2) 空白だけが含まれている、3) 無効な文字が含まれている、4) デバイス パスである、のいずれかの理由が考えられる (ArgumentException)。

  • パスが Nothing であるため、有効でない (ArgumentNullException)

  • ファイルが存在しない (FileNotFoundException)。

  • 他のプロセスがファイルを使用しているか、または I/O エラーが発生した (IOException)。

  • パスがシステムで定義されている最大長を超えている (PathTooLongException)。

  • パス内のファイル名またはディレクトリ名にコロン (:) が含まれているか、または形式が無効である (NotSupportedException)

  • 文字列をバッファーに書き込むための十分なメモリがない (OutOfMemoryException)

  • ユーザーがパスを参照するのに必要なアクセス許可がない (SecurityException)

ファイル名からファイルの内容を判断しないでください。 たとえば、Form1.vb というファイルは Visual Basic のソース ファイルではない可能性もあります。

アプリケーションでデータを使用する前に、入力をすべて検証してください。 ファイルの内容が予想どおりでないことがあり、ファイルの内容を読み取るメソッドが失敗する可能性があります。

関連項目