A veces necesitamos lidiar con instancias de FolderItem
temporales (es decir, archivos con una duración temporal); y en estos casos sería genial no tener que estar pendientes de cuando quedan fuera de ámbito para borrarlos. ¿No sería fantástico poder borrarlos automáticamente según salgan de ámbito? Sigue leyendo y te mostraré una forma de hacerlo.
Para poder lograr que un FolderItem
se borre a sí mismo cuando quede fuera de ámbito crearemos una nueva clase que actuará como “contenedor” del FolderItem propiamente dicho, haciendo para ello uso del método Operator_Convert
; de modo que podamos asignar un FolderItem a una instancia de nuestra clase y también obtener un FolderItem a partir de ella.
Por tanto, vamos allá y crea una nueva Clase. Por ejemplo, puedes asignarle el nombre TempFolderItem
dejando vacío el campo Super
en el Panel Inspector.
Añade una nueva propiedad a la clase TempFolderItem
, utilizando para ello los siguientes valores en el Panel Inspector:
- Name: mFile
- Type: FolderItem
- Scope: Protected
A continuación, añade un método Constructor
a la clase utilizando la siguiente signatura:
- Name: Constructor
- Parameters: f As FolderItem
- Scope: Public
Limitándonos a escribir la siguiente línea de código en el Editor de Código asociado:
mFile = f
A continuación, necesitamos añadir un par de métodos Operator_Convert
:
- Name: Operator_Convert
- Parameters: f As FolderItem
- Scope: Public
- Editor de Código:
mFile = f
- Name: Operator_Convert
- Returned Type: FolderItem
- Scope: Public
- Editor de Código:
Return mFile
Por último, hemos de añadir el método Destructor. Este será el encargado de borrar el FolderItem subyacente una vez que la instancia de clase quede fuera de ámbito:
- Name: Destructor
- Scope: Public
- Editor de Código:
Try If mfile <> Nil And mfile.Exists And mfile.IsWriteable Then If Not mFile.IsFolder Then mfile.Remove End End If Catch e As IOException Raise e End Try
FolderItem Temporal en la Práctica
¡Eso es todo, nuestra definición de clase está completa! Para probarla, continúa con el proyecto de ejemplo usado a la hora de crear la clase (por ejemplo de tipo Desktop), añade el Manejador de Evento Open
a la ventana por defecto y escribe este fragmento de código en el Editor de Código asociado con el evento:
Const textContent As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit" f = New TempFolderItem(specialfolder.desktop.child("Test.txt")) Try Var tos As TextOutputStream = TextOutputStream.Open(f) tos.WriteLine textContent tos.Close Catch e As IOException MessageBox(e.Message) End Try
A continuación, añade una nueva propiedad a la ventana por omisión Window1
utilizando los siguientes valores en el Panel Inspector:
- Property Name: f
- Type: TempFolderItem
- Scope: Public
De este modo, el TempFolderItem
estará dentro de ámbito (es decir, en memoria) siempre que permanezca abierta la ventana Window1
. Una vez que cerremos la ventana, todos sus contenidos serán destruidos de la memoria, incluyendo esta propiedad y, por lo tanto, también se borrará el FolderItem
subyacente almacenado en ella mediante el método Destructor
de nuestra clase.
Ejecuta el proyecto de ejemplo y comprueba como funciona. Verás que se crea el archivo en el Escritorio, y que se borrará automáticamente una vez que cierres la ventana de la aplicación.