Générer un nom de fichier temporaire unique


Contenu du snippet

Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
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
Function GetUniqueTempFileName(Optional ByVal  bCreate As Boolean  = True) As String
    Dim sBuffer As String
    sBuffer = String$(260, vbNullChar)
    
'    aucune  raison qu'on obtienne pas le chemin réel par API mais bon au pire on  peut tenter  par ENVIRON
    If GetTempPath(Len(sBuffer), sBuffer) Then
'       enlève  les  NULL
        GetUniqueTempFileName = LeftB$(sBuffer, InStrB(1, sBuffer,  vbNullChar))
    Else
        GetUniqueTempFileName = Environ$("TEMP")
    End If
    
'   ajoute le slash,  la  fonction sera alors prête à retourner  le  "X:\RéPERTOIRE_TEMP\"
    If Not (RightB$(GetUniqueTempFileName, 2) = "\") Then GetUniqueTempFileName = GetUniqueTempFileName & "\"
    
'   on va générer un  nom  temporaire de fichier temporaire
    sBuffer = String$(260, vbNullChar)
    Call GetTempFileName(GetUniqueTempFileName, App.EXEName, 0&, sBuffer)
    sBuffer = LeftB$(sBuffer, InStrB(1, sBuffer,  vbNullChar))
    
'    retour
    GetUniqueTempFileName = sBuffer
'   l'API a créé le fichier, on supprime si  nécessaire
    If Not bCreate Then Call DeleteFile(sBuffer)
End Function


Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.