mercoledì 18 febbraio 2009

Spostare un file nel cestino, tramite la tecnologia .Net

Riporto l'articolo scritto per il sito iprogrammatori http://www.iprogrammatori.it/articoli/programmazione/art_spostare-un-file-nel-cestino-tramite-la-_613.aspx


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

Nessun commento: