ファイル・フォルダーをごみ箱へ
                                                           玄関へお回り下さい。   
ファイル・フォルダーをごみ箱へ(SHFileOperation API関数を使用)  (098)
   プログラムでファイルをいきなり削除するには、少しためらいますが、ごみ箱へ移動する分には、必要なら元に戻せますし、安心ですネ!
又、ファイル事フォルダーも削除できますので便利です。

Option Explicit   'SampleNo=098 WindowsXP VB6.0(SP5) 2002.05.18
'ファイル操作(コピー・削除・移動・名前を変更)を行う(P1200)
Private Declare Function SHFileOperation Lib "shell32.dll" _
  Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

'動作方法を指定する構造体
Private Type SHFILEOPSTRUCT
  hWnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Long
  hNameMappings As Long
  lpszProgressTitle As String
End Type

Private Const FO_DELETE = &H3&       '削除
Private Const FO_COPY = &H2         'コピー
Private Const FO_MOVE = &H1         '移動
Private Const FO_RENAME = &H4        '名前を変更
Private Const FOF_ALLOWUNDO = &H40&     'ごみ箱へ
Private Const FOF_NOCONFIRMATION = &H10&  '確認なし
Private Const FOF_NOERRORUI = &H400&    'エラーのダイアログを表示しない
Private Const FOF_MULTIDESTFILES = &H1&   '複数ファイル指定


Private Sub sFileDelete(meForm As Form, DelFile As String)
  '**************************************************************
  '* SHFileOperation関数を呼び出しファイルをごみ箱に送る    *
  '* meForm  = ダイアログを表示するForm            *
  '* DelFile = 削除するファイル名(Path付)          *
  '*      複数のファイルを指定する場合vbNullCharで区切り *
  '*      最後は二つのvbNullCharで終わる         *
  '**************************************************************
  On Error Resume Next
  Dim lpFileOp As SHFILEOPSTRUCT
  Dim Result  As Long
  Dim MyFlag  As Long

  '指定方法はお好みで設定して下さい。
  MyFlag = FOF_ALLOWUNDO         'ごみ箱へ
  MyFlag = MyFlag + FOF_NOCONFIRMATION  '確認しない
  MyFlag = MyFlag + FOF_MULTIDESTFILES  '複数ファイル
  MyFlag = MyFlag + FOF_NOERRORUI     'エラーのダイアログを非表示

  ' ファイル操作に関する情報を指定
  With lpFileOp
    .hWnd = meForm.hWnd   ' ダイアログの親ウィンドウハンドルを指定
    .wFunc = FO_DELETE    ' 削除を指定
    .pFrom = DelFile     ' 削除するディレクトリを指定
    ' .pTo = 操作先のファイル名・ディレクトリ名
    .fFlags = MyFlag     '動作方法を指定
  End With

  ' ファイル操作を実行
  Result = SHFileOperation(lpFileOp)
End Sub


Private Sub Command1_Click()
  'Dim MyFile As String
  '複数のファイルを指定する場合vbNullCharで区切り
  '最後は二つのvbNullCharで終わる
  'フォルダーごと削除する場合はフォルダー名を指定する
  'MyFile = "C:\MyFolder\MyFile1.Txt" & vbNullChar & _
"C:\MyFolder\MyFile2.Txt" & vbNullChar & vbNullChar

  Call sFileDelete(Me, "C:\MyFolder")     'MyFile
End Sub
  
今回はファイルをごみ箱へ削除するだけの関数になっておりますが、ファイル名変更やコピー・移動
等の機能も改造して組み込んで下さい。
又、ご利用に際しては十分テストを行って動作確認して下さい。






2002/05/19