Home > Visual Basic Classic > Dateisystem > Temporären Dateinamen ermitteln

Temporären Dateinamen ermitteln

Veröffentlicht am 28.07.2008 von Sebastian Krogolewski

Artikelinformationen

Sprache:
Visual Basic 6
Datenbank:
keine

Artikel speichern

del.icioMister WongGoogleLinkarenaYiggSpurlFurl

Artikel bewerten

Bewertng:4.67 / 5 (3 mal bewertet)

Wer mit Dateien arbeitet der braucht gelegentlich eine temporäre Datei in der er etwas zwischenspeichern muss. Dabei steht man vor dem Problem wie diese temporäre Datei benannt werden soll da es ja theoretisch passieren kann das der gewählte Dateiname bereits durch eine andere Anwendung oder einen anderen Thread aus der eigenen Anwendung bereits verwendet wird. Die Win API bietet dafür die Funktion GetTempFileNameA aus der Kernel32.Dll an.

 

Einbinden der API Funktion GetTempFileNameA als GetTempFileNameAPI aus der Kernel32.Dll.

1
2
3
Private Declare Function GetTempFileNameAPI Lib "kernel32" Alias "GetTempFileNameA" ( _
    ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, _
    ByVal lpTempFileName As String) As Long

 

GetTempFileNameA erwartet 4 Parameter:

lpszPath: Pfadangabe wo der Dateiname ermittelt werden soll.

lpPrefixString: Prefix für den Dateinamen. Es werden max. die ersten 3 Zeichen verwendet.

wUnique: Wenn wUnique = 0, dann ermittelt die Funktion einen eindeutigen Namen. Wenn der Wert <> 0 dann wird ein Dateiname ermittelt aber nicht auf eindeutigkeit geprüft.

lpTempFileName
: Speicherbereich in dem der erzeugte Dateiname geschrieben wurde.

 

Rückgabewert:

Bei Erfolg: der numerische Wert der Zahl welche in dem Dateinamen verwendet wird.

Bei Fehlschlag: 0

 

VB Funktion
1
2
3
4
56
7
8
9
1011
12
13
14
15
Public Function getTempFileName(Optional ByVal Prefix As String = "TMP") As String
Dim strTmp As String
Dim RetVal As Long
 
'Speicher reservierenstrTmp = String$(256, 0)
 
'Den Dateinamen im Zielordner ermitteln
RetVal = GetTempFileNameAPI(FullPath, Prefix, 0&, strTmp)
If (RetVal <> 0) Then    getTempFileName = Left$(strTmp, InStr(strTmp, vbNullChar) - 1)
Else
    getTempFileName = ""
End If
End Function

Dadurch das der Zielpfad mit übergeben wird, kann man sich diese temporären Dateien in belibigen Ordnern erstellen lassen. In der XP und Vista Welt ist heutzutage nicht mehr ratsam solche temporären Dateien außerhalb des Temp Ordners zu verwenden, da die Berechtigungen oder UAC Probleme (sogar Abstürze) verursachen kann. Hier eine etwas erweiterte Variante der obigen Funktion in welcher der aktuelle Pfad des Temp Ordners automatisch ermittelt wird.

 

zusätzliche Win API Funktion GetTempPathA aus der kernel32.dll einbinden.

1
2
Private Declare Function GetTempPathAPI Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, _
    ByVal lpBuffer As String) As Long

 

GetTempPath erwartet 2 Parameter:

nBufferLength: größe des reservierten Puffers.

lpBuffer: Reservierter Speicher in dem das Ergebnis geschrieben wird.

 

Rückgabewert:

Tatsächliche länge der Zeichenkette.

 

Hinweis:

Die API Funktion ermittelt nicht nur den Dateinamen sondern erzeugt auch gleichzeitig eine Datei der länge 0 unter diesem Namen.

 

Zusätzliche Funktion welche den Pfad des Temp Ordners ermittelt.

1
2
3
4
56
7
8
9
1011
12
13
14
Public Function GetTempPath(Optional ByVal AddBackslash As Boolean) As String
Dim strPath As String
Dim strLen As Long
 
strPath = String$(256, 0)strLen = GetTempPathAPI(len(strPath), strPath)
If (strLen > 0) Then
    If (AddBackslash) Then
        GetTempPath = Left$(strPath, strLen)
    Else        GetTempPath = Left$(strPath, strLen - 1)
    End If
End If
End Function

 

und zu guter letzt die erweiterte getTempFileName Funktion

1
2
3
4
56
7
8
9
1011
12
13
14
15
Public Function getTempFileName(Optional ByVal Prefix As String = "TMP") As String
Dim strTmp As String
Dim RetVal As Long
 
'Speicher reservierenstrTmp = String$(256, 0)
 
'gleichzeitig den Temp Ordner ermitteln und dann dort den temporären Dateinamen
RetVal = GetTempFileNameAPI(GetTempPath, Prefix, 0&, strTmp)
If (RetVal <> 0) Then    getTempFileName = Left$(strTmp, InStr(strTmp, vbNullChar) - 1)
Else
    getTempFileName = ""
End If
End Function

 

Mit diesen Funktion sollten jegliche Probleme mit eindeutigen Dateinamen, Berechtigungen oder UAC unter Vista keine Schwierigkeiten mehr machen.

Downloads

Suchbegriffe

VB6, Visual Basic, Temporären Dateinamen, Temp, GetTempFileName

Suche