Sometimes we need to deal with temporary FolderItem instances, and in those cases it would be great to not have to care about when they get out of scope in order to delete them. Wouldn’t it be great to automate that task? Continue reading and you’ll see how easy it is to implement this!
In order to instruct a FolderItem
to delete itself when it’s out of scope, we will create a new class that will act as a wrapper for the FolderItem, making use of the Operator_Convert
method, so we can assign a FolderItem to it and also get the underlying FolderItem wrapped in it.
So, go ahead and create a new Class. We can name it as TempFolderItem
with an empty Super
class in the Inspector Panel.
Add a new property to the new TempFolderItem class, using the following values in the Inspector Panel:
- Name: mFile
- Type: FolderItem
- Scope: Protected
Next, let’s add a Constructor method to our class with the following signature:
- Name: Constructor
- Parameters: f As FolderItem
- Scope: Public
And simply put this line of code in the associated Code Editor:
mFile = f
Then, we need to add a couple of Operator_Convert methods:
- Name: Operator_Convert
- Parameters: f As FolderItem
- Scope: Public
- Code Editor:
mFile = f
- Name: Operator_Convert
- Returned Type: FolderItem
- Scope: Public
- Code Editor:
Return mFile
Finally, we will add the Destructor method. This one will be in charge of deleting the underlaying FolderItem once the class instance is out of scope:
- Name: Destructor
- Scope: Public
- Code Editor:
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
Temporary FolderItems in Practice
That’s all – our class definition is done! In order to test it, create a Desktop project, add the Open
Event Handler to the default window and write this snippet of code in the Code Editor:
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
Next add a new Property to the default window (Window1
) using the following values in the Panel Inspector:
- Property Name: f
- Type: TempFolderItem
- Scope: Public
This way, the TempFolderItem will be in Scope (this is, in memory) while the Window1 window remains opened. Once we close the window, everything will be destroyed from memory, including this property. Also the underlying FolderItem stored on it via the Destructor method of our class will be deleted.
Run the example project and see how it works. While the Window1
window remains open, our file will be available in the Desktop; but as soon we close the Window1
window… the file will be deleted automatically!
Questions? Ask me about Xojo programming on Twitter @XojoES or on the Xojo Forum.