VB.NETフォルダを確実に削除する

スポンサーリンク

System.IO.Directory.Delete メソッドを実行したフォルダの配下に、読み取り専用ファイルが存在すると例外が発生します。これは、削除する前に読み取り専用属性を外すことで解決します。

以下は、その処理を関数化したものです。読み取り専用属性だった場合でも削除したり、または削除をキャンセルする (例外は発生しない) ことができます。引数には、対象ディレクトリのパスと、DirectoryInfo と、どちらでも指定できるようにオーバーロードしています。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
''' ----------------------------------------------------------------------------
''' <summary>
'''     指定したディレクトリをすべて削除します。</summary>
''' <param name="stDirPath">
'''     削除するディレクトリのパス。</param>
''' ----------------------------------------------------------------------------
Public Shared Overloads Sub DeleteDirectory(ByVal stDirPath As String)
    Call DeleteDirectory(New System.IO.DirectoryInfo(stDirPath))
End Sub

''' ----------------------------------------------------------------------------
''' <summary>
'''     指定したディレクトリをすべて削除します。</summary>
''' <param name="hDirectoryInfo">
'''     削除するディレクトリの DirectoryInfo。</param>
''' ----------------------------------------------------------------------------
Public Shared Overloads Sub DeleteDirectory(ByVal hDirectoryInfo As System.IO.DirectoryInfo)
    ' すべてのファイルの読み取り専用属性を解除する
    For Each cFileInfo As System.IO.FileInfo In hDirectoryInfo.GetFiles()
        If (cFileInfo.Attributes And System.IO.FileAttributes.ReadOnly) = System.IO.FileAttributes.ReadOnly Then
            cFileInfo.Attributes = System.IO.FileAttributes.Normal
        End If
    Next cFileInfo

    ' サブディレクトリ内の読み取り専用属性を解除する (再帰)
    For Each hDirInfo As System.IO.DirectoryInfo In hDirectoryInfo.GetDirectories()
        Call DeleteDirectory(hDirInfo)
    Next hDirInfo

    ' このディレクトリの読み取り専用属性を解除する
    If (hDirectoryInfo.Attributes And System.IO.FileAttributes.ReadOnly) = System.IO.FileAttributes.ReadOnly Then
        hDirectoryInfo.Attributes = System.IO.FileAttributes.Directory
    End If

    ' このディレクトリを削除する
    hDirectoryInfo.Delete(True)
End Sub

使用例は以下のようになります。

VB.NET 全般
    ' フォルダをすべて削除する
    DeleteDirectory("C:\Hoge\")

関連するリファレンス

準備中です。

スポンサーリンク