Disposable TemporaryFile

Geschrieben von Andi

Wenn man in einem Programm mit temporären Dateien arbeitet, gehört es normalerweise zum guten Ton, diese anschließend wieder aus dem Temp-Verzeichnis des Benutzers zu löschen, um die Festplatte nicht zuzumüllen.
Das ist natürlich in einem gewissen Grad für den Programmierer nervig. Als ich einen entsprechenden Anwendungfall hatte, habe ich mir gedacht, das muss auch irgendwie eleganter und einfacher gehen. Das hat mich schließlich auf die Idee gebracht, eine kleine Klasse zu programmieren, die mir den ganzen Nebenkram des Dateihandlings – erstellen und wieder löschen der physikalischen Datei – abnimmt. Hierfür hat sich das Dispose Pattern angeboten, das man in .NET über das IDisposable-Interface implementieren kann.

Herausgekommen ist eine kleine aber feine Klasse:

using System;
using System.IO;

public sealed class TemporaryFile : IDisposable
{
    private bool disposed;

    public string FilePath { get; private set; }

    public TemporaryFile()
    {
        FilePath = Path.GetTempFileName();
    }

    ~TemporaryFile()
    {
        Dispose(false);
    }

    #region Dispose Pattern Implementation

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (disposed)
            return;

        if (File.Exists(FilePath))
            File.Delete(FilePath);

        disposed = true;
    }

    #endregion
}

Jetzt ist es ganz bequem möglich, eine temporäre Datei in einem using-Block zu verwenden. Sobald das Ende des Codeblocks erreicht ist, wird die Datei automatisch wieder gelöscht:

using (var file1 = new TemporaryFile())
{
    Console.WriteLine(file1.FilePath);
    // Sonstige Arbeiten an der temporären Datei
}

 
 
 

Kommentar abgeben:

o_O >_< ;P ;) :zombie: :yawn: :upset: :ups: :thx: :rotwerd: :roll: :paranoid: :omfg: :ohmygod: :lol: :hm: :heul: :gnah: :evillaugh: :evileye: :eek: :cries: :crazy: :confused: :aww: :XD: :P :D :) :(

*