VB-Homepage Tipp 327

Temp. Dateinamen über API zuweisen / Temp.verz. ermitteln

Schauen Sie auch von Zeit zu Zeit immer mal in Ihr Temp Verzeichnis und wundern oder ärgern sich über die Vielzahl der temporären Dateien die dort herumliegen und die gar nicht mehr temporär sind, da das Programm
, das diese angelegt hat, sie durch irgendein Ereignis
(System-, Programmabsturz oder schlechte Programmierung)
vergessen hat wieder zu löschen.

Wie Sie das vermeiden können, kann ich Ihnen auch nicht sagen.
Mir geht es in diesem Tipp um etwas anderes.
Schauen Sie sich die Namenskonvention der meißten Temp Dateien
mal etwas genauer an und Sie werden feststellen, die sehen in etwa gleich aus.

Das kann kein Zufall sein und genau so ist es auch.

Selbst für den Zweck der Auslagerung von temporären Daten oder Programminformationen zur Laufzeit in eine Temp Datei gibt es API-Funktionen.


GetTempFileName
zum erzeugen eines Dateinamens für eine temp. Datei.

Dabei können Sie für Ihre Tempdateien die ersten drei Zeichen vorgeben.

Sie sollten dabei als erstes Zeichen ein ~ nutzen, dies werden Sie bei den meisten Tempdateien vorfinden, die anderen beiden Zeichen bleiben Ihnen
zur freien Auswahl.
Die Funktion bastelt dann noch 4 Zeichen und die Endung *.tmp
an Ihre temporäre Datei und gewährleistet damit die Eindeutigkeit des Namens.

Bitte denken Sie aber an das Löschen der Dateien zum Programmende, sonst ärgern sich Ihre Anwender über volle Temp.Verzeichnisse.


GetTempPath

zum ermitteln des Pfades des Temp. Verzeichnisses.

Wichtig für das ablegen der Tempdateien ins Tempverzeichnis ist der Pfad
dorthin. Aber auch sonst, kann es notwendig sein, den Pfad zum
Temp.Verzeichnis zu kennen.
Insofern ist diese API Funktion nicht an die erste gebunden.


Demoprojekt

Auf einer Form plazieren Sie zwei Commandbutton (Command1 & Command2),
der eine wird nur das Temp.Verzeichnis ermitteln und der andere eine
temporäre Datei anlegen und Ihnen den Namen mitteilen.
Command1.Caption = "Temp.Verzeichnis"
Command2.Caption = "Temp.Datei"

Unter
Allgemein/Deklarationen
geben Sie unsere zwei API-Funktionen und eine Konstante ein.

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 MAX_PATH = 260

Command1_Click (Temp.Verzeichnis)
Dim lngRet As Long
Dim strBuffer As String

strBuffer = String$(MAX_PATH, 0)
lngRet = GetTempPath(Len(strBuffer), strBuffer)

If lngRet = 0 Then
  MsgBox "kein Temp.Verz.gesetzt"
  Exit Sub
End If

MsgBox Left$(strBuffer, lngRet)

Command2_Click
(Temp.Datei)
Dim lngRet As Long
Dim strBuffer As String, strTempPath As String
Dim GetTempFile As String

strBuffer = String$(MAX_PATH, 0)
lngRet = GetTempPath(Len(strBuffer), strBuffer)

'kein Temp.Verz
If lngRet = 0 Then Exit Sub

strTempPath = Left$(strBuffer, lngRet)
strBuffer = String$(MAX_PATH, 0)
lngRet = GetTempFileName(strTempPath, "~vb", 0&, strBuffer)

'Datei konnte nicht erstellt werden
If lngRet = 0 Then Exit Sub

lngRet = InStr(1, strBuffer, Chr(0))

If lngRet > 0 Then
  GetTempFile = Left$(strBuffer, lngRet - 1)
Else
  GetTempFile = strBuffer
End If

MsgBox GetTempFile

'wir wollen doch keinen Müll erzeugen, also Temp.Datei wieder löschen
Kill GetTempFile

Starten Sie Ihr Projekt mit F5 und testen Sie die Funktionen.


Tipp-Download

Quelle : sebastian.strand@pp.inet.fi / http://personal.inet.fi/cool/dragon/vb

Zurück zur Übersichtsseite