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 GetTempPath

Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" ( _
                 
ByVal nBufferLength As Long, _
                 ByVal lpBuffer As String) As Long
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui

Description :
Cette fonction sert à récupérer un répertoire pour y placer des fichiers temporaires que vos applications pourraient générer.
nBufferLength est la longueur de la chaîne lpBuffer.
lpBuffer est la chaîne qui contient le répertoire.

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