[vb.net] eindeutige temporäre-Dateien

Gepostet am: May 03, 2011 5:2:32 PM

Eindeutige tmp-Dateien ist prinzipiell recht einfach:

tmp-Datei

Dim sTempFileName As String = System.IO.Path.GetTempFileName()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

Dim sTempFileName As String = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv")

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:

auch nicht

Dim sTempFileName As String = ""Do     sTempFileName = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv")Loop Until (System.IO.File.Exists(sTempFileName) = False)

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:

Vorschlag

Public Function CreateTMPFile(Optional ByVal Extension As String = "tmp") As String         Dim sTempFileName As String = ""         Try             If LCase(Extension) = "tmp" Then                 sTempFileName = System.IO.Path.GetTempFileName()             Else                 Do                     sTempFileName = System.IO.Path.GetTempFileName()                     If System.IO.File.Exists(sTempFileName) Then                         System.IO.File.Delete(sTempFileName)                     End If                     sTempFileName = sTempFileName.Replace(".tmp", "." & Extension)                 Loop Until (System.IO.File.Exists(sTempFileName) = False)             End If             Return sTempFileName         Catch ex As System.IO.IOException             Return CreateTMPFile(Extension)         End Try End Function