Truco: FolderItems Temporales

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *