Comment créer un fichier temporaire en VB ?
Il est fréquent de devoir stocker des informations dans un fichier temporaire. On pourrait bien sur créer "brutalement" un fichier avec un nom particulier dans le répertoire de l'application, mais il s'agit d'une très mauvaise pratique, source de bugs potentiels : insuffisance de privilège pour la création du fichier lors de l'exécution, conflit de nom, etc. Windows dispose d'un répertoire spécial pour les fichiers temporaires. L'API Windows permet de retrouver facilement ce répertoire, indépendamment de la version de Windows. Il existe aussi une fonction de l'API permettant la création d'un fichier temporaire vide avec un nom unique. La fonction suivante permet la création d'un fichier temporaire de façon propre, conformément aux recommandations Microsoft : Option Explicit
Private Declare Function GetTempPath Lib "kernel32" _ Alias "GetTempPathA" (ByVal nBufferLength As Long, _ ByVal lpBuffer 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 GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" ( _ ByVal lpFileName As String) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" ( _ ByVal lpFileName As String, _ ByVal dwFileAttributes As Long) As Long
Private Const FILE_ATTRIBUTE_TEMPORARY As Long = 256
Public Function CreateTempFile(sPrefix As String) As String
Dim sTmpPath As String * 512 Dim sTmpName As String * 576 Dim nRet As Long
Dim attr As Long
nRet = GetTempPath(512, sTmpPath) If (nRet > 0 And nRet < 512) Then nRet = GetTempFileName(sTmpPath, sPrefix, 0, sTmpName) If nRet <> 0 Then CreateTempFile = Left$(sTmpName, _ InStr(sTmpName, vbNullChar) - 1) attr = GetFileAttributes(CreateTempFile) If Not (attr And FILE_ATTRIBUTE_TEMPORARY) = FILE_ATTRIBUTE_TEMPORARY Then SetFileAttributes CreateTempFile, (attr Or FILE_ATTRIBUTE_TEMPORARY) End If End If End If End Function
Private Sub Form_Load()
Dim TempFileName As String Dim f As Integer
TempFileName = CreateTempFile("") f = FreeFile Open TempFileName For Output As #f Print #f, "Hello World" Close #f Kill (TempFileName) End Sub
Important : il est de la responsabilité du programmeur de détruire les fichiers temporaires lorsque ceux-ci ne sont plus utilisés; ces fichiers temporaires ne sont pas automatiquement détruits par le système. On notera dans l'implémentation de la fonction CreateTempFile donnée ci dessus l'emploi de GetFileAttributes et SetFileAttributes; Le but est ici de définir l'attribut "Fichier Temporaire" pour le fichier créé, si ce n'est déjà fait. Ceci permet d'éviter le write-back (écriture sur disque) quand c'est possible, ce qui peut améliorer sensiblement les performances. Remarque : Les fonctions VB GetAttr et SetAttr ne permettent pas de tester ni de définir l'attribut "Fichier Temporaire" (FILE_ATTRIBUTE_TEMPORARY), c'est pourquoi il faut utiliser les fonctions de l'API Windows. Pour aller plus loin Voir aussi : |