Spostare un file nel cestino di Windows

Tempo addietro, durante lo sviluppo di una procedura lato server, mi capitò di dover gestire l’eliminazione di alcuni files, ovviamente la prima cosa che feci fu pensare di cancellare direttamente il file… Ma dopo diverso tempo il cliente mi chiese di modificare tale procedura in modo da non cancellare definitivamente i files ma di spostarli nel cestino ed avrebbe cestinato lui (in un secondo tempo) quelli che riteneva non più necessari.

L’algoritmo che dovetti implementare per cancellare ciascun file fa uso di una API di Windows ed il codice è simile a quello che segue:

Private Type SHFILEOPSTRUCT
 hWnd As Long
 wFunc As Long
 pFrom As String
 pTo As String
 fFlags As Integer
 fAborted As Boolean
 hNameMaps As Long
 sProgress As String
End Type
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Declare Function SHFileOperation Lib "shell32.dll" Alias
  "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Function SpostaNelCestino(file_name As String)
  Dim SHFileOp As SHFILEOPSTRUCT
  With SHFileOp
   .wFunc = FO_DELETE
   .pFrom = file_name
   .fFlags = FOF_ALLOWUNDO
  End With
  SHFileOperation SHFileOp
End Sub