Spostare un file nel cestino, tramite la tecnologia .Net

Questo articolo, illustra una tecnica, di come spostare un file nel cestino tramite il linguaggio VB.Net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Nello sviluppare un applicazione, può tornare utile, nella fase di cancellazione di un file, la possibilità di spostare il file nel cestino anziché eliminarlo in modo definitivo.

Di seguito viene illustrato, l’utilizzo delle api di windows, ed in particolare della funzione SHFIleoperation della dll shell32, per spostare un file nel cestino.

Creazione del progetto

Dopo aver creato il progetto, di tipo windows application, inserire un pulsante nella form, tale pulsante avrà il compito di richiamare una funzione per la cancellazione del file.

Stesura del codice.

Passiamo in visualizzazione codice, ed inseriamo lo spazio dei nomi, per la gestione delle api.

Di seguito si riporta tale dichiarazione.

VB.Net
Imports System.Runtime.InteropServices
C#
using System.Runtime.InteropServices;

A questo punto occorre creare una struttura, che passeremo alla funzione api.

La struttura avrà il compito di contenere le informazioni per la cancellazione ,quali nome file, operazione, ecc. La struttura va creata all’interno della nostra form, nella parte delle dichiarazioni.

Di seguito si riporta la dichiarazione della struttura

VB.Net
  Private Structure SHFILEOPSTRUCT
        Dim hwnd As Integer
        Dim wFunc As Integer
        Dim pFrom As String
        Dim pTo As String
        Dim fFlags As Short
        Dim fAnyOperationsAborted As Boolean
        Dim hNameMappings As Integer
        Dim lpszProgressTitle As String
    End Structure
C#
private struct SHFILEOPSTRUCT
        {
            public int hwnd;
            public int wFunc;
            public string pFrom;
            public string pTo;
            public short fFlags;
            public bool fAnyOperationsAborted;
            public int hNameMappings;
            public string lpszProgressTitle;
        }

Ora dobbiamo scrivere la dichiarazione dell’api ed alcune costanti, che ci consentono di eliminare il file.

Sempre nella parte delle dichiarazioni, inseriamo la funzione api e le costanti, di seguito si riporta il frammento di codice delle suddette operazioni.

VB.Net
"shell32.dll")> _
    Private Shared Function SHFileOperation(ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
    End Function
    Private Const FO_DELETE As Short = &H3
    Private Const FOF_ALLOWUNDO As Short = &H40
    Private Const FOF_CONFIRMMOUSE As Short = &H2
    Private Const FOF_NOCONFIRMATION As Short = &H10S
C#
[DllImport("shell32.dll")]
        private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);
        private const short FO_DELETE = 3;
        private const short FOF_ALLOWUNDO = 64;
        private const short FOF_CONFIRMMOUSE = 2;
        private const short FOF_NOCONFIRMATION = 16;
 

Siamo quasi giunti alla conclusione del nostro articolo, la funzione riportata qui di seguito, permette la cancellazione del file, passato come argomento a tale funzione.

Dopo aver creato una struttura, dello stesso tipo di quella creata in precedenza, impostiamo alcuni campi, e la passiamo alla funzione api.

Di seguito si riporta la funzione per la cancellazione del file.

VB.Net
Public Sub Elimina(ByVal FileName As String)
        Dim StructFile As New SHFILEOPSTRUCT()
        With StructFile
            .fFlags = FOF_NOCONFIRMATION Or FOF_ALLOWUNDO
            .pFrom = FileName
            .wFunc = FO_DELETE
            .pTo = vbNullChar
        End With
        Try
            SHFileOperation(StructFile)
        Catch ex As Exception
            MessageBox.Show("Errore: " & ex.Message)
        End Try
    End Sub
C#
public void Elimina(string FileName)
        {
            SHFILEOPSTRUCT StructFile = new SHFILEOPSTRUCT();
            {
                StructFile.fFlags = FOF_NOCONFIRMATION | FOF_ALLOWUNDO;
                StructFile.pFrom = FileName;
                StructFile.wFunc = FO_DELETE;
                StructFile.pTo = null ;
            }
            try
            {
                SHFileOperation(ref StructFile);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Errore: " + ex.Message);
            }
        }

Nell’evento click del pulsante situato nella form, richiamiamo la funzione per la cancellazione del file, passandogli il percorso e nome di un file esistente.

Di seguito si riporta il frammento di codice, di tali istruzioni.

VB.Net
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Elimina("C:\fileElimina.txt")
    End Sub
C#
private void Button1_Click(object sender, EventArgs e)
        {
            Elimina("C:\\fileElimina.txt");
        }

Conclusioni.

In questo articolo, si è visto come tramite l’uso delle api, è possibile eliminare un file, spostando nel cestino, anziché eliminarlo definitivamente. 

L’applicazione di esempio è stato scritto per  applicazioni di tipo windows application.

Tramite la parola download potete scaricare i file di esempio, utilizzato nell’articolo, per entrambi i linguaggi.

Download