Tipp 0500 Temporäre Dateinamen anfordern
Autor/Einsender:
Datum:
  Detlev Schubert
22.06.2006
Entwicklungsumgebung:   VB 6
Sollen in einer Anwendungen Daten, Dokumente oder bestimmte Zustände nur vorübergehend gespeichert werden, empfiehlt sich die Verwendung von temporären Dateien. Natürlich kann man dies auf verschiedene Arten erledigen, wer dies aber professionell machen möchte, greift in die API-Trickkiste, denn genau zu diesem Zweck stellt das Betriebssystem mit dem TEMP-Ordner ein spezielles Verzeichnis und die entsprechenden API-Funktionen zur Verfügung.
Zum Anlegen einer temporären Datei ist natürlich auch ein eindeutiger Dateinamen notwendig, da auch andere Anwendungen im TEMP-Ordner ihre Dateien ablegen, und es so zu Namenskonflikten kommen könnte.
Mit der API-Funktion GetTempPath wird zuerst ermittelt, wo sich der Temporär-Ordner befindet. Anschließend lassen wir uns mit GetTempFileName einen temporären Dateinamen zurückgeben. Der Dateiname besteht aus einem maximal dreistelligen Präfix, der mit dem Parameter SFilePrefix vorgegeben werden kann (wie im Beispiel $VB), einem zufällig gebildeten vierstelligen Hexadezimalwert (z.B. 1AC8), sowie der Endung .tmp.
Das Beispiel zeigt, wie ein temporärer Dateinamen angefordert und spätestens beim Beenden der Anwendung ordnungsgemäß wieder gelöscht wird.
Code im Codebereich des Moduls
 
Option Explicit

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 strBufferLength As Long, ByVal _
      lpBuffer As String) As Long

Public Function CreateTempFile(strPrefix As String) As String
  Dim strBuffer   As String
  Dim nRetVal     As Long
  Dim lngPos      As Long
  Dim strTempDir  As String

  strTempDir = GetTempDir
  strTempDir = strTempDir & _
        IIf(Right$(strTempDir, 1) = "\", "", "\")

  strBuffer = Space(255)
  nRetVal = GetTempFileName( _
        strTempDir, Left$(strPrefix, 3), 0&, strBuffer)

  If nRetVal <> 0 Then
    lngPos = InStr(strBuffer, Chr$(0))
    If lngPos = 0 Then
      CreateTempFile = strBuffer
    Else
      CreateTempFile = Left(strBuffer, lngPos - 1)
    End If
  End If
End Function

Function GetTempDir() As String
  Dim strBuffer As String
  Dim nRetVal   As Long
  Dim strPath   As String

  strBuffer = Space(255)
  nRetVal = GetTempPath(255, strBuffer)

  If nRetVal > 0 Then
    strPath = Left$(strBuffer, nRetVal)
  Else
    strPath = CurDir$
  End If

  GetTempDir = strPath
End Function
 
Links zum Thema
Temporäres Verzeichnis ermitteln
Hinweis für VBA-Anwender
Der hier abgebildete Code des Moduls funktioniert auch in einem VBA-Projekt, dieser muss dazu lediglich in den VB-Editor der entsprechenden Anwendung kopiert oder aber die im Download enthaltene *.bas-Datei importiert werden. Ein Import der im Download enthaltenen *.frm-Datei ist nicht möglich.

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,8 kB) Downloads bisher: [ 342 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 28. August 2011