Astuces de recherche...
Home
- Accueil & nouveautés
- Les newsgroups VB
- Téléchargements
- L'équipe
- Nous contacter
- Liens
Rubriques
- Toutes les questions
- Affichage & graphismes
- Algorithmique
- API
- Base de registre
- Bases de données
- Contrôles
- Date & heure
- Déploiement
- Divers
- Erreurs & problèmes
- Fichiers & dossiers
- Généralités
- Impression
- Internet & mails
- Math
- Multimédia
- Réseaux
- Structures de données
- Texte & strings
- VB .Net
- VB Script
- VBA
- Windows

Question 207

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

'
' Exemple d'utilisation
'
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 :

Date de publication : 24 janvier 2009
Dernière modification : 24 janvier 2009
Rubriques : Fichiers & dossiers, Généralités
Mots-clés : création, fichier, file, temporaire, temporary, temp, GetTempPath, GetTempFileName, GetFileAttributes, SetFileAttributes