フォルダの削除可能かの確認
- 題名: フォルダの削除可能かの確認
- 著者: しば
- 日時: 2007/10/23 10:29:27
- ID: 20795
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: フォルダの削除可能かの確認
- 著者: れい
- 日時: 2007/10/23 15:32:56
- ID: 20798
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: フォルダの削除可能かの確認
- 著者: しば
- 日時: 2007/10/23 16:20:48
- ID: 20801
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: フォルダの削除可能かの確認
- 著者: れい
- 日時: 2007/10/23 16:39:55
- ID: 20803
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: フォルダの削除可能かの確認
- 著者: y4yama
- 日時: 2007/10/24 14:51:18
- ID: 20806
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
タスク→スケジュール→夜間バッチで
バックアップ処理を実行しています
バックアップ先のフォルダは
API関数(SHFileOperation)を使用して一旦、削除します
※削除するフォルダ内にはファイル、サブフォルダ等が存在する前提
問題は
対象フォルダが削除不可のとき(共有フォルダ、アクセス権限がない)
API関数だとエラートラップされません
スケジュール実行すると
削除の箇所で処理が止まります(裏でメッセージボックスが表示されている?)
事前に削除可能かの判断が必要かと思うのですが
どの様な方法があるのでしょうか?
また、他に案があればアドバイスを願います
※
現状のコードです
Private Structure SHFILEOPSTRUCT
Public hWnd As IntPtr
Public wFunc As Int32
<MarshalAs(UnmanagedType.LPStr)> Public pFrom As String
<MarshalAs(UnmanagedType.LPStr)> Public pTo As String
Public fFlags As Int16
Public fAnyOperationsAborted As Boolean
Public hNameMappings As IntPtr
<MarshalAs(UnmanagedType.LPStr)> Public lpszProgressTitle As String
End Structure
<DllImport("SHELL32.DLL", CharSet:=CharSet.Ansi)> _
Private Shared Function SHFileOperation(ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
End Function
Public Const FO_MOVE As Int32 = &H1 'ファイルの移動(pFrom から pTo へ移動)
Public Const FO_COPY As Int32 = &H2 'ファイルのコピー(pFrom から pTo へコピー)
Public Const FO_DELETE As Int32 = &H3 'ファイルの削除(pFrom を削除 pTo は無視されます)
Public Const FO_RENAME As Int32 = &H4 'ファイル名変更(pFrom の名前変更)
Public Const FOF_MULTIDESTFILES As Int16 = &H1 '受け側に複数のファイルを指定
Public Const FOF_CONFIRMMOUSE As Int16 = &H2 '処理なし
Public Const FOF_SILENT As Int16 = &H4 '進捗ダイアログボックス非表示
Public Const FOF_RENAMEONCOLLISION As Int16 = &H8 '同一ファイル名の場合名前変更(コピ〜○○○)
Public Const FOF_NOCONFIRMATION As Int16 = &H10 '確認操作なし
Public Const FOF_WANTMAPPINGHANDLE As Int16 = &H20 'マッピングハンドル取得
Public Const FOF_ALLOWUNDO As Int16 = &H40 '削除の際ごみ箱に移動する
Public Const FOF_FILESONLY As Int16 = &H80 'ファイルのみを対象(*.* が指定された時)
Public Const FOF_NOCONFIRMMKDIR As Int16 = &H200 'フォルダ作成確認なし
Public Const FOF_SIMPLEPROGRESS As Int16 = &H100 '進捗ダイアログボックス表示
Public Const FOF_NOERRORUI As Int16 = &H400
Dim destinationFolder As DirectoryInfo
destinationFolder = New DirectoryInfo("\\XXXX\YYYY")
If destinationFolder.Exists = True Then
DeleteFolder(destinationFolder.FullName)
〜
End If
Private Function DeleteFolder( _
ByVal folder As String _
) As Boolean
Dim SFO As New SHFILEOPSTRUCT
Dim result As Integer
SFO.hWnd = Me.Handle
SFO.wFunc = FO_DELETE
SFO.pFrom = folder & Chr(0) & Chr(0)
SFO.fFlags = FOF_NOCONFIRMMKDIR + FOF_NOCONFIRMATION + FOF_SILENT
SFO.fAnyOperationsAborted = True
SFO.hNameMappings = IntPtr.Zero
result = SHFileOperation(SFO)
Application.DoEvents()
Return result = 0
End Function