Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~

Fonction GetTempFileName

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
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui

Description :
Avec cette fonction le système vous retourne un nom de fichier temporaire dont vous pouvez vous servir dans vos programmes.
lpszPath est le nom du répertoire dans lequel sera placé votre fichier,
lpPrefixString est un préfixe de trois lettres qui sera utilisé dans le nom du fichier temporaire,
wUnique est de préférence à mettre à zéro pour garantir que le fichier est unique, le système cherche alors un nom de fichier n'existant pas déjà dans le répertoire. Si il est différent de zéro il crée juste le fichier avec ce numéro sans regarder s'il existe déjà.
lpTempFileName est le nom du fichier temporaire renvoyé.

Exemple d'utilisation :

' Exemple proposé par : Christophe M (ch.m@free.fr)
'-----------------------------------------------------------
' Déclarations
'-----------------------------------------------------------
Option Explicit

' Récupérer le chemin du répertoire temporaire
Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" ( _
                
ByVal nBufferLength As Long, _
                
ByVal lpBuffer As String) As Long

' Créer un nom de fichier temporaire
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

' Créer un fichier
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
                
ByVal lpFileName As String, _
                
ByVal dwDesiredAccess As Long, _
                
ByVal dwShareMode As Long, _
                
ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
                
ByVal dwCreationDisposition As Long, _
                
ByVal dwFlagsAndAttributes As Long, _
                
ByVal hTemplateFile As Long) As Long

' Fermer un fichier
Public Declare Function CloseHandle Lib "kernel32" ( _
                
ByVal hObject As Long) As Long

' Supprimer un fichier
Public Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" ( _
                
ByVal lpFileName As String) As Long

'--------------------------------------
' Constantes et structure pour l'API CreateFile
'--------------------------------------
' Type des attributs de sécurité
Public Type SECURITY_ATTRIBUTES
    nLength
As Long
   
lpSecurityDescriptor As Long
   
bInheritHandle As Long
End Type

' Valeur de retour si erreur
Public Const INVALID_HANDLE_VALUE = -1

' dwDesiredAccess
Public Const GENERIC_WRITE = &H40000000
Public Const GENERIC_READ = &H80000000

' dwShareMode
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2

' dwCreationDisposition
Public Const CREATE_NEW = 1
Public Const CREATE_ALWAYS = 2
Public Const OPEN_EXISTING = 3
Public Const OPEN_ALWAYS = 4
Public Const TRUNCATE_EXISTING = 5

' dwFlagsAndAttributes
' attributs
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const FILE_ATTRIBUTE_HIDDEN = &H2
Public Const FILE_ATTRIBUTE_READONLY = &H1
Public Const FILE_ATTRIBUTE_SYSTEM = &H4
' flags
Public Const FILE_FLAG_WRITE_THROUGH = &H80000000
Public Const FILE_FLAG_OVERLAPPED = &H40000000
Public Const FILE_FLAG_NO_BUFFERING = &H20000000
Public Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Public Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Public Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Public Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Public Const FILE_FLAG_POSIX_SEMANTICS = &H1000000

'-----------------------------------------------------------
' creerFicTemp
'-----------------------------------------------------------
Public Function creerFicTemp(ByRef pS_messErr As String, _
                            
ByRef pS_pathFicTemp As String, _
                            
ByRef pI_handleFicCreer As Long, _
                            
Optional pB_fermerFic As Boolean = True) As Boolean

' Crée un fichier temporaire (unique) dans le répertoire temp du système
' pS_pathFicTemp : nom du fichier .tmp créé (affecté par référence)
' pI_handleFicCreer : handle du fichier .tmp créé (affecté par référence)
' pB_fermerFic : à true = on ferme le fichier

On Error GoTo errVB

Static sI_bufferLength
As Long
Static sS_prefix As String * 3 ' préfixe du fichier temp
Dim lS_repTemp As String ' repertoire temp
Dim lS_nomFicTemp As String ' fichier temp
Dim lO_securAttr As SECURITY_ATTRIBUTES
Dim lI_handleTemp As Long ' handle fic temporaire
Dim lI_handleFic As Long ' handle fic créé

' initialisation de la structure SECURITY_ATTRIBUTES
lO_securAttr.nLength = Len(lO_securAttr)
lO_securAttr.bInheritHandle =
True
lO_securAttr.lpSecurityDescriptor = 0

' initialisation des variables
sI_bufferLength = 50
sS_prefix = "CHM"
' mon trigramme
lS_repTemp = Space$(50)
lS_nomFicTemp = Space$(100)
creerFicTemp =
False ' la fonction est en erreur par défaut

' récupération du répertoire temp
If GetTempPath(sI_bufferLength, lS_repTemp) = 0 Then
   
Form1.Print "Impossible de trouver le chemin du répertoire temporaire !"
   
Exit Function
End If

' génération d'un nom de fichier (unique dans le répertoire temporaire)
If GetTempFileName(Mid$(lS_repTemp, 1, InStrRev(lS_repTemp, "\")), _
                   sS_prefix, 0, lS_nomFicTemp) = 0
Then
   
pS_messErr = "Impossible de créer un fichier temporaire !"
   
Exit Function
End If

' "nettoyage" du nom du fichier
lS_nomFicTemp = Mid$(lS_nomFicTemp, 1, InStrRev(lS_nomFicTemp, ".tmp", , vbTextCompare) + 3)
pS_pathFicTemp = lS_nomFicTemp

' création du fichier dans le répertoire temporaire
lI_handleFic = CreateFile(lS_nomFicTemp, _
                          0, _
                          0, _
                          lO_securAttr, _
                          CREATE_ALWAYS, _
                          FILE_ATTRIBUTE_NORMAL, _
                          lI_handleTemp)

If lI_handleFic = INVALID_HANDLE_VALUE Then
   
pS_messErr = "Impossible de créer le fichier temporaire !"
   
Exit Function
End If

pI_handleFicCreer = lI_handleFic

If pB_fermerFic Then
   
' fermeture du fichier
   
If CloseHandle(lI_handleFic) <> 1 Then
       
pS_messErr = "Impossible de fermer le fichier ayant le handle : " & lI_handleFic
       
Exit Function
    End If
End If

' tout est Ok
creerFicTemp = True
Exit Function

errVB:
    pS_messErr = "Erreur inattendu : " & Err.Description
End Function

Retour à la liste des API

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr