In meiner Arbeit mit VB.NET stoße ich oft auf die Notwendigkeit, temporäre Dateien zu erstellen, die nicht nur eindeutig, sondern auch mit einer spezifischen Dateiendung versehen sein müssen. Das Standardverfahren über System.IO.Path.GetTempFileName() generiert zwar eine eindeutige Datei, aber immer mit der Endung .tmp. Hier stieß ich auf ein häufiges Problem: Was, wenn eine andere Dateiendung erforderlich ist, beispielsweise .csv? Die direkte Ersetzung der Endung führt nicht immer zu einem zufriedenstellenden Ergebnis, da dies die Einzigartigkeit der Datei beeinträchtigen kann. Hier möchte ich eine robustere Methode zur Erstellung solcher Dateien vorstellen.

Eindeutige tmp-Dateien ist prinzipiell recht einfach:

' Erstellt einen Namen für eine temporäre Datei
Dim sTempFileName As String = System.IO.Path.GetTempFileName()

' Eröffnet einen FileStream für die temporäre Datei im Erstellungsmodus
Dim fsTemp As New System.IO.FileStream(sTempFileName, IO.FileMode.Create)

Problematischer wird es, wenn die temporäre Datei nicht die Dateiendung .tmp hat, sondern eine beliebige andere. Die Herangehensweise mittels:

  • nicht verwenden: ist nicht zielführend, da so nicht garantiert werden kann, dass die Datei nicht bereits existiert. Auch in einer Schleife, die überprüft, ob die Datei existiert, muss nicht immer funktionieren:
Dim sTempFileName As String = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv")
  • auch nicht
' Initialisiert einen leeren String für den temporären Dateinamen
Dim sTempFileName As String = ""

' Beginnt eine Schleife, um einen eindeutigen Dateinamen zu finden
Do
    ' Generiert einen temporären Dateinamen und ersetzt die Endung .tmp durch .csv
    sTempFileName = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv")

    ' Schleife wird fortgesetzt, bis ein eindeutiger Dateiname gefunden ist
Loop Until Not System.IO.File.Exists(sTempFileName)

Aber was dann? Es gibt für C++ eine sehr interessante Diskussion zu diesem Thema. Die vorgeschlagenen Methoden sind äußerst interessant. Ich bevorzuge jedoch folgende Methode:

Kurzbeschreibung des Codes:

  • Die Funktion CreateTMPFile erstellt eine einzigartige temporäre Datei mit einer optionalen spezifischen Dateiendung.
  • Für die Standardendung .tmp verwendet sie direkt System.IO.Path.GetTempFileName().
  • Für andere Dateiendungen erstellt sie zunächst eine temporäre .tmp-Datei, löscht diese und ersetzt dann die Endung, um die gewünschte Dateiendung zu erhalten. Dies wird in einer Schleife wiederholt, bis eine einzigartige Datei erstellt wird.
  • Die Funktion verwendet rekursive Aufrufe zur Fehlerbehandlung, falls während des Erstellungsprozesses ein IOException auftritt.