フォルダを確実に削除する
スポンサーリンク
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\")
関連するリファレンス
準備中です。