[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