Jak odczytać ścieżkę do folderu TEMP?

przez | 2024-05-08

Pisząc nieco bardziej zaawansowane makra czasami chcemy „na chwilę” utworzyć jakiś plik tymczasowy, który po wykonaniu makra zostanie usunięty. Najlepszą lokalizacją na takie pliki tymczasowe jest systemowy folder temp.

U mnie przykładowo ten folder znajduje się w lokalizacji:

C:\Users\[Nazwa_użytkownika]\AppData\Local\Temp

lub

C:\Windows\Temp\

Obie lokalizacje są problematyczne. Do pierwszej trzeba znać nazwę użytkownika a do drugiej ścieżkę do systemu Windows (zazwyczaj C:\Windows\ ale nie jest to reguła). Oprócz tego można zmienić ścieżkę do folderu Temp w ustawieniach systemu. Poza tym w nowszych wersjach Windowsa domyślna ścieżka do folderu TEMP może ulec zmianie, więc najlepiej skorzystać z jakiejś funkcji, która zwróci ścieżkę do folderu TEMP.

Najprostszy sposób to odczytanie zawartości zmiennej środowiskowej TEMP. Oto przykładowy kod zwracający ścieżkę do folderu na pliki tymczasowe:

Function GetTempPath() As String
    GetTempPath = Environ("TEMP")
End Function

Możesz również skorzystać z Win32API korzystając z funkcji: GetTempPathA, ale tutaj będzie troszkę więcej kodu i należy uwzględnić sytuację, że niektóre osoby mają 32- albo 64-bitową wersję pakietu MSOffice. Oto przykładowy kod:

#If VBA7 Then
Declare PtrSafe Function GetTempPathA Lib "kernel32" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
#Else
Declare Function GetTempPathA Lib "kernel32" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
#End If

Function GetTempPathAPI() As String
    Dim sTempPath As String
    Dim nLength As Long
    
    sTempPath = Space(255)
    nLength = GetTempPathA(255, sTempPath)
    
    If nLength > 0 Then
        GetTempPathAPI = Left(sTempPath, nLength)
    Else
        GetTempPathAPI = ""
    End If
End Function

A czy Ty znasz jeszcze jakiś inny sposób, jak można odczytać ścieżkę do folderu Temp?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *