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