Wie der Name es sagt: Temporäre Dateien sind vergänglich. Sie
werden von Anwendungen vorübergehend angelegt, um verschiedene
Daten, Zustände oder gerade in Bearbeitung befindliche Dokumente
zwischenzuspeichern. Es ist zwar kein Muss, aber als allgemeine
Übereinkunft gilt, einen im System als speziell für diesen Zweck
deklarierten Ordner zur Ablage von temporären Dateien zu verwenden
- den TEMP-Ordner. Windows stellt dazu sogar eine eigene
API-Funktion bereit, über die Sie den Pfad dieses Ordners ermitteln
können ( Gesucht
- Systemordner).
Wenn sie nun für ihr Programm eine temporäre Datei erzeugen
wollen, brauchen sie natürlich einen eindeutigen Dateinamen.
Schließlich legen ja auch andere Anwendungen im TEMP-Ordner ihre
Dateien ab, so dass es leicht zu Namenskonflikten kommen könnte.
Sie könnten natürlich einfach einen beliebigen Dateinamen wählen
und für den Fall, dass eine Datei dieses Namens bereits existieren
sollte ( Sein
oder nicht sein), in einer Schleife einen neuen Dateienamen
kreieren, bis Sie einen freien gefunden haben. Doch besser ist wie
immer der Weg, die speziell dafür bereitgestellte API-Funktion GetTempFileName
zu verwenden. Der Funktion werden vier Parameter übergeben.
Declare Function GetTempFileName Lib "kernel32" Alias _
"GetTempFileNameA" (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
Im ersten Parameter, lpszPath übergeben Sie den Pfad, in dem die
temporärer Dateiname angelegt werden soll, vorzugsweise den des
TEMP-Ordners.
In lpPrefixString übergeben Sie einen aus bis zu drei Zeichen
bestehenden Präfix, den Sie dem Dateinamen voranstellen möchten.
Damit können Sie gewissermaßen eine "Duftmarke" Ihrer
Anwendung darstellen. Sie können natürlich auch ganz trivial ein
"tmp" übergeben.
Um den Parameter wUnique brauchen Sie sich nicht weiter zu
kümmern. Hier könnten Sie Ihrer temporären Datei eine von Ihrer
Anwendung selbst generierte und verwaltete Nummer geben. Übergeben
Sie 0, erzeugt Windows selbst eine eindeutige Zahl anhand der
Systemzeit.
Im Puffer lpTempFileName liefert Ihnen die Funktion den erzeugten
Dateinamen zurück.
Die folgende Funktion CreateTempFile verpackt den Aufruf auf
VB-gerechte und einfach handzuhabende Weise. Beide Parameter sind
optional. Verzichten Sie auf den individuellen Präfix, wird "tmp"
als Präfix verwendet. Lassen Sie die Pfadangabe weg, wird die Datei
automatisch im TEMP-Ordner des Systems angelegt. Dazu wird hier die API-Funktion
GetTempPath direkt aufgerufen ( Gesucht
Systemordner). Konnte aus irgendeinem Grund keine temporäre
Datei angelegt werden, wird ein leerer String zurückgegeben.
Beachten Sie, dass der Aufruf der API-Funktion GetTempFileName
auf jedem Fall eine Datei anlegt, die Sie nach Gebrauch oder
Nichtgebrauch wieder ordnungsgemäß löschen sollten. Dieses
Verhalten der API-Funktion ist sinnvoll, da nach einer reinen
Ermittlung eines unverwendeten Dateinamens dieser doch schon nicht
mehr frei sein könnte, wenn Sie selbst nur Sekunden später eine
Datei dieses Namens anzulegen versuchten.
Private Declare Function GetTempFileName Lib "kernel32" Alias _
"GetTempFileNameA" (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias _
"GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Const kLength = 255
Public Function CreateTempFile(Optional Prefix As String = "tmp", _
Optional TempPath As String) As String
Dim nBuffer As String
Dim nReturn As Long
Dim nPosEnd As Long
Dim nTempPath As String
If Len(TempPath) = 0 Then
nBuffer = Space(kLength)
nReturn = GetTempPath(kLength, nBuffer)
If nReturn > 0 Then
nTempPath = Left(nBuffer, nReturn)
Else
nTempPath = CurDir$
If Right$(nTempPath, 1) <> "\" Then
nTempPath = nTempPath & "\"
End If
End If
Else
nTempPath = TempPath
End If
nBuffer = Space(kLength)
nReturn = GetTempFileName(nTempPath, Left$(Prefix, 3), 0&, _
nBuffer)
If nReturn <> 0 Then
nPosEnd = InStr(nBuffer, Chr$(0))
If nPosEnd = 0 Then
CreateTempFile = nBuffer
Else
CreateTempFile = Left(nBuffer, nPosEnd - 1)
End If
End If
End Function
 |
Temporäre Dateien mit eindeutigen
Dateienamen legen Sie mit der Funktion CretateTempFile an

|
|