3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(.Net)画像ファイルを表示しながら削除可能にする方法

PictureBoxであるイメージファイルを表示したままそのファイルを消す場合の方法です。通常ファイル名を指定して Bitmap オブジェクトを作成し、Pictureboxにセットした後、File.Delete(パス) で消しますが、こうすると例外発生します。

なぜなら Bitmap をファイルから作成した場合、その Bitmap オブジェクトが解放されるまでイメージファイルをロックするからです。

ということで、下記のコードでは読み込み専用のオブジェクトを使って読み込み、Picturebox表示用イメージを作成後、読み込み専用オブジェクトを破棄(Discope)します。破棄した時点でファイル操作(削除とか)が可能になります。

Imports System.IO
 Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            '読み込みだけに使う一時イメージオブジェクト(読み込み専用オブジェクト)
            Dim bufBmp As New Bitmap("C:\test.jpg")
            'Pictureboxに表示するイメージオブジェクト作成
            Dim bmp As New Bitmap(bufBmp)
            '読み込み一時用イメージオブジェクト解放(解放した時点でファイルのロックが解放される)
            bufBmp.Dispose()
            Me.PictureBox1.Image = bmp
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            File.Delete("C:\test.jpg")
        Catch ex As Exception
            MsgBox(ex.Message)
         End Try
    End Sub
End Class